问题简介:调用C DLL
我必须控制通过提供一个DLL文件,LIB文件API一定的设备,和C头文件,其函数声明为dllimport的。
当我在C++项目中使用API时,一切正常 - 我包含头文件,lib,dll,并调用头文件中声明的函数。
当试图使用[DllImport]属性从C#.NET项目调用这些函数时,问题就开始了:函数声明了确切的名称和参数,并且运行代码没有抛出任何异常。然而,该设备根本没有回应,就像这些功能从未被实际称过一样。
它是如何在C头声明:
int __declspec(dllimport) Init_Card_RTx(unsigned short device_num, unsigned short enabled_channels, unsigned short xmt_channels);
如何在C#中声明:
[DllImport(Path, CallingConvention = CallingConvention.Cdecl, EntryPoint = "Init_Card_RTx")]
public static extern int Init_Card_RTx(UInt16 device_num, UInt16 enabled_channels, UInt16 xmt_channels);
的问题:
- 是,由于功能在头文件中声明了dllimport?
- 在这种情况下,我是否必须用声明为dllexport的C++函数来封装DLL?
- 从C#访问C DLL需要什么步骤?
- 在C#项目中,我还必须包含LIB文件吗?不只是DLL文件本身?
这将有助于看到您正在使用的导出和导入签名。没有他们给出明确的答案是困难的。 –
不,不,不,不。显然你对这个问题的猜测是行不通的。没有人能看到你所犯的错误,这不是YouTube。 –
我看到有几个人投票结束了这个。请不要。 C#/ C++ P/invoke编程问题当然是堆栈溢出的话题,对于那些对P/invoke没有深入了解的人来说,它似乎是一个合理编写的问题。 –