c++写了一个test.dll,内部有几个类分别是class A class B class C
类A,B,C下面分别有一些函数func1,func2,func3.....
怎么调用某个类下面的函数
我用的dllimport,入口点entrypoint怎么写?

解决方案 »

  1.   

    类,只能对应C#的类
    别的基础类型,网上搜下,如https://www.cnblogs.com/chuncn/archive/2011/12/20/2294096.html
      

  2.   

    没有对应的,是用户自己建立的class,下面一堆的函数,比如a::func1,b::func2之类的
    问题就在于,不知道entrypoint填什么好,我使用dependency工具去查这dll内部的函数,都是一堆问号开头的比如?a@func1@!@#$%这类的函数名,直接拷贝了填是可以但是会提示内存出错,怀疑是函数调用入口问题
    不知道这类带有class的函数要怎么调用,以前用过都是直接import dll然后entrypoint写函数名就可以了,但是现在因为dll里面的函数都在每个类下面,就不知道entrypoint写啥好了
      

  3.   

    C++需要导出的API,用extern "C"包起来,按C的方法编译的方法名称不会带上参数信息.
    关于怎么在托管代码中写非托管方法的声明,建议多了解一点PInovke的知识.
    需要示例可以参考:Pinvoke.Net
      

  4.   

    C++函数导出基本上都是用基础类型。很少用到类的。原因是不同的编译器,对类的具体实现可以不同。
    由于布局的不同,C#并不能理解C++的类,甚至同是C++编译器,都会存在兼容的问题l。在C#中调用C++类,不是说完全不可能,却是代价很高。不容易调试,不容易维护,得不偿失。
    最可行的做法是,只用基础类型来导出C函数(这也是大部分Win32 API的做法)。