/////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()获得类指针,但如何调用类中的函数呢?
      在网上查了好久,也没有什么结果,求各位大侠赐教,感激不尽啊!!!

解决方案 »

  1.   

    这么说可能复杂了
    简单点就是C++动态库中有个函数,返回值是C++类指针,那么C#如何使用这个函数?
    又如何使用该函数返回的类指针?
      

  2.   

    你这样做是不行的,需要在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)