【发布时间】:2015-10-07 15:35:38
【问题描述】:
这已经被问了一百万次了,但我仍然无法让它工作。所以我问: 我有一个 DLL 导入(非托管 C/C++ 代码),我想从 C# 调用但无法开始工作。我从 VB.net 移植,代码(有效)如下:
Module Module1
Public Declare Function autodetect_SearchAxis Lib "autodetect.dll" (ByVal onusb As Boolean, ByVal searchsubadress As Byte, ByRef portname As String, ByRef devicelocation As String) As Integer
Public AxisCom As String
Public AxisAdress As Byte = 1
Public Dummy As String
Public rc As Integer
Sub Main()
Dummy = Space(1024)
AXISCom = Space(1024)
rc = autodetect_SearchAxis(False, AxisAdress, Dummy, AxisCom)
Debug.WriteLine("rc: " + rc.ToString())
Debug.WriteLine("AxisCom: " + AxisCom.ToString())
End Sub
End Module
我手头没有我的 C# 代码尝试 ATM,但我尝试了使用 SttingBuilder 类的各种版本。如果有人可以帮助我将此代码移植到 C#,我将非常感激。提前致谢!
编辑:
我现在有了DLL函数的签名:
int _stdcall autodetect_SearchAxis(bool onusb, BYTE searchsubadress, char* &portname, char* &devicelocation)
David Heffernan 建议的解决方案部分有效。它正在工作(我没有错误消息),但返回的字符串是垃圾。本质上,这是我已经在工作的(具有相同的垃圾输出)。我不确定这是否与字符编码有关(我没有收到任何错误消息)。希望签名有所帮助。
【问题讨论】:
-
为什么不试试 VB.NET 到 C# 的转换器? =3
-
你有没有调用函数的示例C++代码
-
不幸的是,@RayKoopa 代码转换器并非没有缺陷。由于这里涉及到一个 dll 导入,如果代码转换器确实有效,我会感到有点惊讶。
-
我已经用 DLL 的签名/声明和问题描述更新了我的问题。希望有人有更多的建议。谢谢!
-
@packoman 你能在这里找到解决方案吗?如果您能接受答案,那就太好了。
标签: c# c++ .net vb.net dllimport