【发布时间】:2012-10-30 13:45:44
【问题描述】:
我一直试图在我的 C# 应用程序中包含一个 C DLL,用于 windows mobile 6.5,但我无法获得正确的行为。
我一直尝试使用的函数如下(如头文件中所述):
extern "C" __declspec (dllimport) BOOL Init (wchar_t *data);
其中数据是输入/输出参数。
我的代码,包括这个功能,是这样的:
[DllImport(@"ICCardReader.dll")]
public static extern int Init([MarshalAs(UnmanagedType.LPWStr)] ref string data);
尽管在运行时调用此函数时编译器会接受这一点,但该函数的行为不佳(结果始终为假)。
所以除了明显的“我做错什么了吗?”之外,我的问题是:当涉及到指针时,如何在 C# 应用程序中包含 C DLL?
P.S.我已经能够通过第三方应用程序验证 DLL 的正确性
[编辑]
感谢用户的建议,我已将 Dllimport 更改如下:
public static extern int Init(StringBuilder data);
【问题讨论】:
-
swig (swig.org/compare.html) 的工作?
-
我不知道有这样的东西,它非常吸引人,我一定会研究它。
-
C# 有指针,我会使用它们。
-
如果传递给函数的数据指针在函数中发生了变化,可以考虑使用StringBuilder而不是ref string。
-
@sardok 是的,字符串被函数修改了,所以我将输入参数更改为 StringBuilder 但仍然没有变化。