关于c#调用c++的DLL文件问题

yangtingta1376 2017-10-16 12:05:11
最近做课题,需要用窗体调用C++的SDK开发包,引用了DLL之后,函数是可以调用了,但是里面宏定义的参数没有被定义。

比如:
[DllImport("HISDK.dll")]
static extern HI_S32 HI_SDK_Init();

上述的HI_S32显示未被定义。
我在开发包的一个C++的一个头文件中找到了 typedef int HI_S32;

再比如, HI_SDK_Init( )的返回值应该是HI_SUCCESS 或者 HI_ FAILURE 。
我的程序中的几行代码如下:
if (HI_SDK_Init() == HI_SUCCESS) MessageBox.Show("OK");
else MessageBox.Show("NO");
会出现错误“当前上下文中不存在HI_SUCCESS”。

我想问一下,在这个SDK开发包中,DLL文件里面都是不包含.h文件的吗。
我现在想把这个头文件引用到C#中,应该如何做呢?我在网上找到的方法是 同样将.h文件生成dll文件,然后引用。
但是我生成的dll文件里面没有函数,只有宏定义等等一些参数定义。我用C#调用我生成的DLL文件时就出现了错误:“错误 CS0601 必须在标记为 "static" 和 "extern" 的方法上指定 DllImport 特性 ”。


这个是SDK说明书里面给的。

不知道我有没有说清楚,希望大佬可以帮忙解决一下,谢谢。


...全文
316 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你如果指定这些宏定义的内容的话,可以在C#代码中重新定义一份,完全可以。比如 HI_S32 表示的int,那么你在C#中可以直接用int,因为在C++代码中只是给整型重新定义了一个名字,本质上还是4个字节的整数,用int和HI_S32 是一样的。再比如HI_SUCCESS,如果你知道它的值为0,你完全可以在代码中直接用0,。
dy00544 2017-10-16
  • 打赏
  • 举报
回复
引用 楼主 yangtingta1376 的回复:
最近做课题,需要用窗体调用C++的SDK开发包,引用了DLL之后,函数是可以调用了,但是里面宏定义的参数没有被定义。 比如: [DllImport("HISDK.dll")] static extern HI_S32 HI_SDK_Init(); 上述的HI_S32显示未被定义。 我在开发包的一个C++的一个头文件中找到了 typedef int HI_S32; 再比如, HI_SDK_Init( )的返回值应该是HI_SUCCESS 或者 HI_ FAILURE 。 我的程序中的几行代码如下: if (HI_SDK_Init() == HI_SUCCESS) MessageBox.Show("OK"); else MessageBox.Show("NO"); 会出现错误“当前上下文中不存在HI_SUCCESS”。 我想问一下,在这个SDK开发包中,DLL文件里面都是不包含.h文件的吗。 我现在想把这个头文件引用到C#中,应该如何做呢?我在网上找到的方法是 同样将.h文件生成dll文件,然后引用。 但是我生成的dll文件里面没有函数,只有宏定义等等一些参数定义。我用C#调用我生成的DLL文件时就出现了错误:“错误 CS0601 必须在标记为 "static" 和 "extern" 的方法上指定 DllImport 特性 ”。 这个是SDK说明书里面给的。 不知道我有没有说清楚,希望大佬可以帮忙解决一下,谢谢。
c#当然不能导入头文件,你可以在c#里面自己定义。 已经编译好的c++ dll文件肯定是不会有头文件在里面的,但是sdk里面应该有头文件的。 你去看下头文件里面HI_SUCCESS到底该是什么值就行了。

110,568

社区成员

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

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

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