1

我一直在尝试在我的 C# 应用程序中包含一个 C DLL,用于 windows mobile 6.5,但我无法获得正确的行为。

我一直在尝试使用的功能如下(如头文件中所述):

extern "C" __declspec (dllimport) BOOL Init (wchar_t *data);

其中 data 是输入/输出参数。

我的代码,包括这个功能,是这样的:

[DllImport(@"ICCardReader.dll")]
public static extern int Init([MarshalAs(UnmanagedType.LPWStr)] ref string data);

尽管在运行时调用此函数时编译器会接受这一点,但该函数具有不良行为(结果始终为假)。

所以我的问题,除了明显的“我做错了什么?”之外,是:当涉及指针时,如何在 C# 应用程序中包含 C DLL?

PSI 已经能够通过第三方应用程序验证 DLL 的正确性

[编辑]

感谢用户的建议,我将 Dllimport 更改如下:

public static extern int Init(StringBuilder data);
4

1 回答 1

0

您可能想检查 BOOL 的定义。我怀疑这可能是由于 C 中缺少内置的 bool 而导致的其他类型定义。

可能值得尝试将您的 DllImport 更改为

[DllImport(@"ICCardReader.dll")]
public static extern int Init(StringBuilder data);

并检查是否有一些整数值返回。

[编辑] 还尝试将输入更改为 StringBuilder

于 2012-10-30T13:51:44.893 回答