
C#中调用C++编译的DLL
C++编译的DLL中,我要调用一个函数,这个函数的返回值是一个自定义类的对象的指针.请问我在C#中应该如何接收这个返回值并且调用这个对象中的方法呢?是要取到函数地址吗?需...
C++编译的DLL中,我要调用一个函数,这个函数的返回值是一个自定义类的对象的指针. 请问我在C#中应该如何接收这个返回值并且调用这个对象中的方法呢? 是要取到函数地址吗?需要用委托吗? 最好能帮我写个简短的例子,谢谢!
展开
1个回答
展开全部
如果是托管C++的话可以像1L说的一样直接引用,不过估计这样你就不会问了吧……
C#当中可以调用Native代码DLL中导出的函数,前提是你知道这个函数的名字。不要以为这个条件很简单,这意味着你必须把这个函数定义为extern
"C"(也就是标准C的DLL导出,不要用VC++的C++导出格式,更不能直接导出类)。换句话来说,最起码的条件是,你把这个类的成员函数全部定义成普通的函数,也就是把
int
MyClass::MyMember(int
paraA,int
paraB);
这样的函数写成
extern
"C"{
int
MyClass_MyMember(MyClass
*pointThis,
int
paraA,
int
paraB);
}
这样的形式然后导出。当然,构造函数和析构函数也不例外,尤其析构函数非常重要,可能需要手工调用。
这些只是最基本的条件。在C#当中调用Native库的函数,而且还用到指针,是一件非常危险的事情,极其容易造成内存泄露,最好三思而后行。
C#当中可以调用Native代码DLL中导出的函数,前提是你知道这个函数的名字。不要以为这个条件很简单,这意味着你必须把这个函数定义为extern
"C"(也就是标准C的DLL导出,不要用VC++的C++导出格式,更不能直接导出类)。换句话来说,最起码的条件是,你把这个类的成员函数全部定义成普通的函数,也就是把
int
MyClass::MyMember(int
paraA,int
paraB);
这样的函数写成
extern
"C"{
int
MyClass_MyMember(MyClass
*pointThis,
int
paraA,
int
paraB);
}
这样的形式然后导出。当然,构造函数和析构函数也不例外,尤其析构函数非常重要,可能需要手工调用。
这些只是最基本的条件。在C#当中调用Native库的函数,而且还用到指针,是一件非常危险的事情,极其容易造成内存泄露,最好三思而后行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询