猿问

C# 下调用C++封装的动态库

现有自己封装的一个C++动态库。要在C#下进行调用。用DllImport加载到C#下,提示无法加载,在网上搜了下,一般原因都有两种,一个是路径不对,另一个是封装的DLL里面还有别的DLL,路径已查验是正确的。由于自己C++封装的DLL里面包含别的DLL(这些不是自己封装的没源码),所以原因90%锁定在是由于包含了别的DLL上了。

别人给的解决方法就是把这些C++封装时依赖的DLL也添加进去。但是现在问题是不知道怎么添加。DllImport不可以(主要是这个后面还要有接口函数,但是依赖的DLL的接口函数在C#下没用,再者接口函数很多的几十个而且又不止一个Dll)。

所以想高手有什么好的解决方法。有个例子什么的最好

PS:本人刚接触C#还望能说的详尽点。谢谢!~

三国纷争
浏览 582回答 10
10回答

慕姐4208626

[DllImport("mediastream.dll", EntryPoint =" _rtprecv@8")]static extern int rtprecv(int portbase, IntPtr playwnd); 注意你的EntryPoint名称,必须和Dependency看到的一样. 除此之外,你还得考虑CallingConvention属性.

ITMISS

你在引用里把那几个DLL库都添加进去就OK了吧

蝴蝶刀刀

是不可以添加引用的,提示说不是有效的程序集或com组件。谢谢~

Smart猫小萌

不是添加引用。。。而是直接考到运行目录下就可以了。

蝴蝶不菲

问题上 我已经说了这种方法试过了。不可以。我是添加引用路径把所有依赖库都放在一个文件夹里了。谢谢~

繁星点点滴滴

还有就是确认一下版本...32位和64位的不同.C#如果选择64位cpu 就不能调用32位的dll

米脂

都是32位的,我是在一个机子上编译的。

12345678_0001

前面两个还理解。最后那个代码中的EPCSDK.dll和OpenComm;是自己的东西还是就是都这样就可以?

精慕HU

[DllImport("mediastream.dll", EntryPoint = "rtprecv")] static extern int rtprecv(int portbase, IntPtr playwnd);我自己的代码。
随时随地看视频慕课网APP
我要回答