在 C# 中使用的函数C++调用

PInvoke C++ function to use in C#

本文关键字:函数 C++ 调用      更新时间:2023-10-16

我在从 c++ 调用本机函数时遇到问题...我已经毫无问题地调用了所有其他本机函数(参数是非常简单的转换)。下面是 C++ 原型及其在 C++ 中的用法:

DECL_FOOAPIDLL DWORD WINAPI FOO_Command(
VOID *Par,  //pointer to the parameter(s) needed by the command 
DWORD Len,  //length of Parameter in bytes
DWORD Id    //identification number of the command 
);

用法:

static DWORD DoSomething(WCHAR *str)
{
DWORD len = (wcslen(str)+1)*sizeof(WCHAR);
DWORD ret = FOO_Command((VOID *)str,len,FOOAPI_COMMAND_CLOSE);
return(ret);
}

my C# 密码:

[DllImport("FOO.dll")]
    static public extern uint FOO_Command(IntPtr par, uint len, uint id);
private void DoSomething()
{
    string text = "this is a test";
    IntPtr ptr = Marshal.StringToHGlobalUni(text);
    uint hr = FOO_Command(ptr,255, FOOAPI_COMMAND_CLOSE);
    Marshal.FreeHGlobal(ptr);
}

1) 这是调用此 API 的正确方法吗?2) 如何获得 PTR 的大小,其中我有 255 作为参数?

以上确实有效,但我是 PInvoke 和"原生"世界的新手......

谢谢

private void DoSomething() 
{ 
    string text = "this is a test"; 
    IntPtr ptr = Marshal.StringToHGlobalUni(text); 
    uint hr = FOO_Command(ptr, (text.Length + 1) * 2, FOOAPI_COMMAND_CLOSE); 
    Marshal.FreeHGlobal(ptr); 
}