【发布时间】:2011-05-04 11:06:15
【问题描述】:
我有一个静态库。该库定义了以下函数
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-Import 签名是:
[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
【问题讨论】:
-
在 10 年前使用 TCHAR 是有意义的。没有了,没有您必须支持的非 Unicode 操作系统了。让一切都变成 wchar_t 并继续前进。
-
将 lpData 传递给 WriteData 函数时,什么“不起作用”?
-
静态库接口中究竟有什么功能? you 在你的包装 DLL 中写的是什么部分?您希望提供什么接口?
-
lib 函数在成功时返回 0,在失败时返回 -1。我根据函数的输出来判断成功和失败。
-
如果您不向我们展示该功能,我们如何告诉您您的功能存在什么问题?
标签: c# .net c++ interop marshalling