C#调用第三方C++接口

a824930219 2017-12-28 11:28:53
接口是C++的 有一个API包
但是我对C++也就了解一些基础
所以我想直接通过C#调用 在网上查了很多方法都不行
包括重写了他里面的头文件 还是不行 难受啊 这个东西难住我好多天了
API包里就这几个文件



下面是他头文件中声明的虚方法
virtual int __cdecl Connect(const char *ip,int port)=0;

下面是我C#再类中写的
[DllImport("EsunnyQuot.dll")]
public unsafe static extern int Connect(char* ip,int port);

还有回调函数
virtual int __cdecl OnRspLogin(int err,const char *errtext)=0;

我C#也用同样的方法写的
[DllImport("EsunnyQuot.dll")]
public unsafe static extern int OnRspLogin(int err, char* errtext);

用的unsafe 只想先测试下这样子行不行
但是到了后面 他在Demo的头文件里创建了个类的指针 我完全懵逼了
所以就想问问各位大佬 这个是只能C++去调用还是可以用C#调用
伟大的C#能调用的话 麻烦各位大佬给小弟一些方法
...全文
724 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2018-01-10
  • 打赏
  • 举报
回复
这么吝啬,你写出来的都不是 API 。 API 不可能用 virtual 来修饰,而是使用 extern 来修饰。 这些不是 API ,而是接口方法。 需要先创建或者获取这个接口。 如果他不是使用系统的 Create Instance,也就是说,如果这个 DLL 不是 COM 组件,那么肯定会有一个 API ,用来获取或创建这个接口的实例。 如果是 COM 组件,你直接导入到 .NET 工程中就可以了。 如果不是,在创建这个接口之后,通过这个接口来调用需要的方法。 接口返回的 IntPtr,其指向一个 IntPtr 内存,获取这个内存中的数据,这个获取的IntPtr 就是虚表的起始地址。 从这个地址,根据虚函数在在虚表中的排列顺序,获取到虚函数指针。注意接口的继承。 把这个指针转换成 C# 的函数,注意 this 参数。 然后就可以了。
xian_wwq 2018-01-10
  • 打赏
  • 举报
回复
引用 6 楼 a824930219 的回复:
[quote=引用 5 楼 xian_wwq 的回复:] c#通过dllimport来调用c/c++ dll, 是有条件的 如果不是extern “C”的定义,是没有办法直接调用的 [/quot 有什么办法知道 它是不是用extern "C"定义了的吗?
dll的提供方,肯定会给用户.h 相关定义都在.h中有体现的
a824930219 2017-12-31
  • 打赏
  • 举报
回复
多么的悲伤 这么几天了 才两个人回答 0.0
a824930219 2017-12-29
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
成员函数不能调用,只能调用静态函数,并且导出才能调用
这么说C#是能调用这个DLL咯 但是我感觉前面有好大一堵墙挡着我哦
a824930219 2017-12-29
  • 打赏
  • 举报
回复
意思要在MAIN 中去调用? 他这样创建指针
IEsunnyQuotClient * m_client;
我不知道在C#中怎么才能实现 这么晚了 辛苦大佬了
a824930219 2017-12-29
  • 打赏
  • 举报
回复
顶一顶,等大佬们来布道0.0
a824930219 2017-12-29
  • 打赏
  • 举报
回复
[quote=引用 5 楼 xian_wwq 的回复:] c#通过dllimport来调用c/c++ dll, 是有条件的 如果不是extern “C”的定义,是没有办法直接调用的 [/quot 有什么办法知道 它是不是用extern "C"定义了的吗?
xian_wwq 2017-12-29
  • 打赏
  • 举报
回复
c#通过dllimport来调用c/c++ dll, 是有条件的 如果不是extern “C”的定义,是没有办法直接调用的
threenewbee 2017-12-28
  • 打赏
  • 举报
回复
成员函数不能调用,只能调用静态函数,并且导出才能调用
a824930219 2017-12-28
  • 打赏
  • 举报
回复
请大佬给小弟指条明路

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧