相关疑难解决方法(0)

将wchar_t*转换为字符串

如何在win32控制台中将wchar_t*数组转换为std::stringvarStr.

c++ string winapi wchar-t type-conversion

20
推荐指数
2
解决办法
7万
查看次数

DllImport - ANSI与Uni​​code

我对下面的测试问题的可能答案有一些疑问:

问题:您编写以下代码段以使用平台调用从Win32应用程序编程接口(API)调用函数.

string personName = "N?el";
string msg = "Welcome" + personName + "to club"!";
bool rc = User32API.MessageBox(0, msg, personName, 0);
Run Code Online (Sandbox Code Playgroud)

您需要定义一个最佳编组字符串数据的方法原型.您应该使用哪个代码段?

// A.
[DllImport("user32", CharSet = CharSet.Ansi)]
public static extern bool MessageBox(int hWnd, string text, string caption, uint type);
}

// B.
[DllImport("user32", EntryPoint = "MessageBoxA", CharSet = CharSet.Ansi)]
public static extern bool MessageBox(int hWnd,
[MarshalAs(UnmanagedType.LPWStr)]string text,
[MarshalAs(UnmanagedType.LPWStr)]string caption, uint type);
}

// C. - Correct answer
[DllImport("user32", CharSet = CharSet.Unicode)]
public static extern bool MessageBox(int hWnd, string …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke

4
推荐指数
1
解决办法
6182
查看次数

将char指针从C#传递给C++

可能重复:将
char指针从C#传递给c ++函数

我有这种类型的问题:

我有一个带有此签名的c ++函数:

int myfunction ( char* Buffer, int * rotation)
Run Code Online (Sandbox Code Playgroud)

缓冲区参数必须填充空格字符(0x20十六进制)

在C++中,我可以简单地解决这个问题:

char* buffer = (char *)malloc(256);
memset(buffer,0x20,256);
res = myfunction (buffer, rotation);
Run Code Online (Sandbox Code Playgroud)

我试图从C#调用此函数.

这是我的p/invoke声明:

[DllImport("mydll.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern unsafe int myfunction (StringBuilder Buffer, int* RotDegree);
Run Code Online (Sandbox Code Playgroud)

在我的C#类中,我试图这样做:

StringBuilder buffer = new StringBuilder(256);
buffer.Append(' ', 256);
...
myfunction(buffer, rotation);
Run Code Online (Sandbox Code Playgroud)

但它不起作用....

有人可以帮帮我吗?

谢谢.

c# pinvoke pointers

3
推荐指数
1
解决办法
6316
查看次数

标签 统计

c# ×2

pinvoke ×2

c++ ×1

pointers ×1

string ×1

type-conversion ×1

wchar-t ×1

winapi ×1