在C#COM-DLL项目中使用外部DLL进行MS-Access的使用

问题描述 投票:0回答:1

用户的主要应用程序是ms-access(使用ms-sql服务器)。 VBA中的代码吨。我必须表现出的主要功能之一是控制客户的voip电话。我的计划是制作ms-access可以使用的COM DLL。

到目前为止,我已经设法编写了一个C#项目(vs2019 .net框架),该项目使用json很好地处理了voip pbx,并完成了所有必要的任务,例如调用电话,发送短信,获取电话列表,重新编码列表中,获取录音的wav文件并将其转换为mp3。我使用Newtopsoft.Json和NAudio.Lame。

但是它只能作为独立的.net项目或exe。作为COM DLL(类库)-ms-access可以处理和使用它,直到它到达代码使用任何外部dll功能的部分-并崩溃(与newtonsoft)或只是不起作用(与naudio),尽管dll位于工作文件夹中。

我知道我必须找到一种方法来使这些外部dll在办公室(32位)环境下工作。我尝试并猜测了几天的许多代码示例。我尝试遵循Assembly.Load / From / File示例动态加载并包含dll,但未能在代码中吸收它,甚至无法充分理解它。

我希望我能在这里找到解决方案。谢谢:)

c# json ms-access dll naudio
1个回答
0
投票

哼,我能够创建一个用于Access的COM对象。当该类代码用作Access中的COM对象时,用于序列化数据的外部库代码(在我的情况下为Newton soft)可以正常工作。您没有提到其他库是托管代码还是外部win32 .dll?但是,我将非托管.dll与.net COM对象一起使用,然后从MS-access中使用了该对象。唯一的问题将在项目资源管理器中,以确保您具有外部引用的.net .dll库的本地副本设置= true。 (这是默认设置,所以我敢肯定。当然,下一个问题当然是使用配置文件吗? (app.config)等?当然,这样做的原因是由于您的应用程序是使用msaccess.exe启动的,因此将假定配置和设置位于office安装文件夹中,而不是本地应用程序中。结果,将这些app.config文件移动/复制到msaccess.exe所在的office文件夹并不是很实用。并且配置文件名不仅必须位于同一文件夹中,而且还必须命名。

Msaccess.exe.config。

代替

YourDotNet.exe.config

现在,当然,如果您将项目构建为.net exec?那么,当然,所有配置设置(应用程序设置,而非用户设置)都将放置在此配置文件中,并且当然该文件必须与.exe文件放置在同一文件夹中。

因此,您可以向您从VBA测试/调用的类中添加“测试”函数(任何函数都是该类的方法),以确保可以看到和读取此类设置(如果您使用的是任何设置) 。

例如:

System.Reflection.Assembly.GetExecutingAssembly()。Location +“ .config”

因此,将其返回以访问并显示此结果。

另一个问题当然是将您的项目强制使用x86。我不会使用“任何” CPU。尽管这种“可能”可行,但是由于您正在使用访问x32,所以我将强制将.net类编译为x86,而不是“任何” CPU。如果将某些外部程序集与特定位大小进行比较,这也会吐出一些错误,因此x86设置将导致您的类不使用某些外部.net .dll。

[现在,您“注意”您的项目作为.exe,然后“ sort of”作为类,而“ .dll”注册为COM。

[但是,您没有提到如何将其从.exe“翻转”到类中,或者您只是拥有一个以.exe运行的.net“测试”项目,当然它还有一个对该类.dll的引用。而且您不使用“ COM”进行此测试。

如果您的test.exe程序可以使用该外部程序集?

然后,我将创建一个test2项目,但是这次不引用程序集(如.net),而是尝试使用.net CreateObject()。 (我认为c#可以选择– vb.net当然可以)。

因此您可以尝试在此.net测试示例中使用+ CreateObject(),然后从.net作为COM进行测试。

因此,此测试.net程序(一个未引用程序集的程序将在您完全进入ms-access + VBA测试代码之前进行一次中间测试。

但是,由于当您翻转到COM对象,然后在Access / VBA中创建该对象的实例时,如前所述,我将首先在此处测试/检查是否正在使用app.config文件?然后将不使用配置文件。您可以在.net代码中强制/更改该正在运行的程序集中的app.config文件,而我似乎找不到执行此操作的代码示例。但是,在这种情况下,我们确认您正在使用app.exe.config文件之前,我不会太费劲。

© www.soinside.com 2019 - 2024. All rights reserved.