请教:c#调用c++类中的一个方法,我预期的做法是
c++代码:
class __declspec(dllexport) Calc
{
public:
    int Add(int x, int y) { return x + y; }
};
c#调用代码:
[DllImport("HPPDemo.dll", EntryPoint = "Add", CallingConvention = CallingConvention.ThisCall)]
public static extern int Add(int x, int y);HPPDemo.dll为c++编译后生成的dll,提示没有Add接入点,请问应该怎么使用呢

解决方案 »

  1.   

    c++中输出的是Add名字吗,默认可不是,你需要指定一下的,比如做一个.def文件,在里面写上输出函数的名字
      

  2.   


    我是用的c++生成的dll,如果没有类的时候在c++方法名前加__declspec(dllexport)可以c#调用到,
    但在类的前面加上__declspec(dllexport) 不知道怎么调用类中的方法了
      

  3.   


    那怎么搞,想要个c#调用c++的dll例子,
    调用的是c++类中的方法,就像我给出的例子那样
      

  4.   

    不懂c++,我现在只有一个c++的dll,有例子的抛一个哦
      

  5.   

    http://blog.163.com/marje@126/blog/static/64422578201101411239332/http://download.csdn.net/detail/yanggang510/3442841
      

  6.   

    你可以用Depends.exe看看你的DLL中是否有这个Add函数。如果你是用VC编写的DLL,必须是标准DLL才可以被调用,如果是扩展DLL则不行。
      

  7.   

    6楼的办法也不错:把它写成COM类
      

  8.   


    使用查看器,如果以方法为接入点的话,能看到Add,也能调用成功,但是以类为接入点就只能看到类了,想调用其中的方法怎么搞
      

  9.   

    http://blog.csdn.net/starlee/article/details/2864588
      

  10.   

    库函数命名规则为"_"+"原函数名"+"@"+"4*参数个数"楼主的这个函数名应该是_Add@8不知道对不对
    我也才学调用动态库
      

  11.   

    确定dll在你的C#的运行程序里面,
    [DllImport("HPPDemo.dll", EntryPoint = "Add", CallingConvention = CallingConvention.ThisCall)]检查这句代码是否正确,或者是直接使用[DllImport("HPPDemo.dll")]
      

  12.   


    谢,那个我看了,我明白你的意思,我也想先声明类的对象,然后调用类的方法,我现在只有一个标准c++的dll,而我又不懂c++,我该怎么用C#声明c++的类,并调用c++的方法呢?难道我要再封装成托管c++?...求教
      

  13.   

    谢,我明白你的意思,我也想先声明类的对象,然后调用类的方法,我现在只有一个标准c++的dll,而我又不懂c++,我该怎么用C#声明c++的类,并调用c++的方法呢?难道我要再封装成托管c++?...求教