c# - C++中字符串的L前缀

标签 c# .net c++ interop marshalling

我有一个静态库。该库定义了以下函数

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/

相关文章:

c# - WPF ListBox,SelectedIndex 不是突出显示的行

.net - 在什么情况下,我们需要两次调用GC.Collect

.net - DataContractJsonSerializer.ReadObject 有时会抛出 : The token "was expected but found ' Â'

c# - 以管理员身份运行 cmd 和命令?

c++ - 在基类的复制构造函数上调用虚方法时多态性不启动

c# - asp.net 表达式生成器问题

javascript - 将 bootstrap 模态打印为 PDF

c# - 无法删除 MemoryMappedFile 的文件

c++ - 信号与槽QT

c++ - 共享内存仅在第一次起作用