我有一个静态库。该库定义了以下函数
int WriteData(LPTSTR s)
调用函数的示例是
LPTSTR s = (LPTSTR) L"Test Data";
int n = WriteData(s);
WriteData 成功返回 0,失败返回 -1。
我正在编写一个动态 DLL 来导出此函数。
int TestFun(LPTSTR lpData)
{
return WriteData(lpData);
}
一个C++测试应用结果
LPTSTR s = (LPTSTR) L"Test Data";
TestFun(s); //OK return 0
LPTSTR s = (LPTSTR) "Test Data";
TestFun(s); //Fail return -1
我必须从 C# 应用程序调用它。我假设我的 DLL 导入签名是:
[DllImport("Test.dll")]
private static extern int TestFun(String s);
我的问题很简单如何从 .Net 调用它? 如您所见,我可以控制
TestFun(LPTSTR lpData)
但无法控制
WriteData(LPTSTR s)
感谢大家的意见。到目前为止,我一直坚持类型转换。我认为当我能够从用户那里获取输入并写 2 行用于转换来代替下一行时,我的问题就会得到解决。
LPTSTR s = (LPTSTR) L"Test Data"); //<= How can ii take input from user and
TestFun(s); //OK return 0
最佳答案
L 前缀使字符串成为 wchar_t 字符串。
您可以使用 Windows API 函数 MultiByteToWideChar
将 ANSI 字符串转换为 wchar_t 字符串。
关于c# - C++中字符串的L前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086817/