当前位置:编程学习 > C#/ASP.NET >>

求教: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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,