【发布时间】:2017-07-24 14:53:12
【问题描述】:
我在非托管库中有这个函数,我想在 C# 中调用它:
unsigned char __stdcall InitDev(unsigned char comport, long BaudRate)
这是在 C# 中
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("*.dll", CallingConvention = CallingConvention.Cdecl,CharSet =CharSet.Auto)]
public static extern byte[] InitDev(byte[] comport, [Out]long BaudRate);
但是当我在 C# 中调用此函数时,出现以下错误
“无法封送'返回值':托管/非托管类型组合无效。”
string COM = "COM3";
byte[] ptr = new byte[1];
try
{
ptr = InitDev(Encoding.ASCII.GetBytes(COM), 9600);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
如果提供一些指导,我是新手,我将能够解决此问题
【问题讨论】:
-
这个函数几乎不可能在 C 程序中可靠地调用,当你从 C# 中执行它时,它永远不会变得更好。你不知道数组中有多少元素,也不知道如何释放它。您必须与此代码的程序员交谈以了解该指针的含义。只要你这样做,让他解决它。波特率参数是一个 int。
标签: c# c++ marshalling