求教:C#调用C++抽象类导出DLL(类似COM)
/////IA.h//导出抽象类定义
class IA
{
public:
virtual void add(int a, int b, int &c) = 0; //求和函数,输出结果c
}
//导出API函数
extern "C" __declspec(dllexport) IA *CreatClass(); //创建类实例
extern "C" __declspec(dllexport) ReaseClass(IA *p); //销毁类实例
/////A.h
//派生类
class A : public IA
{
public:
virtual void add(int a, int b, int &c); //基类中的纯虚函数,派生类中实现;
}
问题:
我先调用CreatClass()函数获得类指针,即可调用类中的函数add(int a, int b, int &c),这在C++中调用没有任何问题,但是这个动态库如何在C#中调用呢?
在C#中也可重写CreatClass()获得类指针,但如何调用类中的函数呢?
在网上查了好久,也没有什么结果,求各位大侠赐教,感激不尽啊!!! --------------------编程问答-------------------- 听得有点儿迷糊,不过帮顶了,也学习了.......... --------------------编程问答-------------------- --------------------编程问答-------------------- 这么说可能复杂了
简单点就是C++动态库中有个函数,返回值是C++类指针,那么C#如何使用这个函数?
又如何使用该函数返回的类指针? --------------------编程问答-------------------- 你这样做是不行的,需要在VC那把IA的所有导出函数,封装为API函数:(单独建一个VC工程更好)
1、C++那把处理
在.h头文件:
IA* pIA=NULL;
extern "C" __declspec(dllexport) void Initialize();
extern "C" __declspec(dllexport) void UnInitialize();
extern "C" __declspec(dllexport) void add(int a, int b, int &c);
在.cpp文件:
void Initialize()
{
pIA=CreatClass();
}
void UnInitialize()
{
if(pIA!=NULL)
{
ReaseClass(pIA);
pIA=NULL;
}
}
void add(int a, int b, int &c)
{
pIA->add(a,b,c);
}
2、在C#这边处理:
[DllImport("xxx.dll",EntryPoint="Initialize")]
void Initialize();
[DllImport("xxx.dll",EntryPoint="UnInitialize")]
void UnInitialize();
[DllImport("xxx.dll",EntryPoint="add")]
void add(int a, int b,ref int c)
补充:.NET技术 , C#