C#调用C++的动态库类的成员函数…………急……
C#在调用C++动态库的时候使用了DllImport函数,但是在填写EntryPoint参数的时候需要填写函数的入口地址,而不是函数名。非类的成员函数访问可以直接填写函数...
C#在调用C++动态库的时候使用了DllImport函数,但是在填写Entry Point 参数的时候需要填写函数的入口地址,而不是函数名。非类的成员函数访问可以直接填写函数名。有没有什么办法可以直接填写类的成员函数名来设置Entry Point 参数的值。求大神指点。急等…………还有大侠可以介绍几种C#访问C++动态库的方法。
我看网上好多例子都是直接访问动态库类的成员函数,可是我直接写入DllImport在调用函数时候会出现无法找到函数入口的错误,增么办 …………………… 展开
我看网上好多例子都是直接访问动态库类的成员函数,可是我直接写入DllImport在调用函数时候会出现无法找到函数入口的错误,增么办 …………………… 展开
2个回答
展开全部
将C++动态库的类,做成COM组件的对象;
在C++中,另外弄个非成员函数来访问C++类成员,然后提供给C#调用。
追问
这个方法我想过,但是可能会影响速度,你的意思就是在类中声明全局函数,在全局函数中创建类的对象,然后调用类的成员函数。为什么我看网上给的例子都是直接用函数名的。做COM组件不是很熟悉啊!现在急用
追答
使用VC++自带的ATL模板做COM组件很简单的,只要点几下鼠标,框架就生成好了。然后自己写代码就是。只要你稍微了解一下COM组件,然后网上找个教程看那么1-2天,没问题的。
展开全部
你得C++ DLL是导出的类吧?
你可以尝试先把C++的DLL转C接口的DLL,这样就很方便了。
你可以尝试先把C++的DLL转C接口的DLL,这样就很方便了。
追问
不行,C不支持继承、多态等。转了就复杂了,虽然使用简单了。还有没有什么好的工具可以查看函数名和入口地址?因为里面有多态,所以好多入口地址我分不清楚到底哪个才是对应的函数。有没有什么工具可以给我将函数名和函数入口地址一一对应起来显示,这样就方便多了。
追答
我不知道c#有没有得到地址的方法。
如果你有DLL的编译源码 在里面可以添加得到函数地址的接口再次编译,就可以在C#中得到函数地址。
也可以新建一个中间DLL 在该dll 里写函数得到你的那个DLL的模块的函数地址
HINSTANCE dll_hInstance = ::GetModuleHandle(_T("XXX.dll"));
GetProcAddress(dll_hInstance,"fuc");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询