【发布时间】:2010-11-15 22:26:01
【问题描述】:
我正在尝试将短类型参数传递给从 DLL 导入的 C++ 非托管函数。在我的 C++ DLL 代码中,我有以下函数:
__declspec(dllexport)void ChangeIcon(char *executableFile, char *iconFile,
UINT16 imageCount)
{
// Some code, doesn't matter
}
在 C# 托管代码中,我使用以下代码导入此函数:
[DllImport("IconChanger.dll")]
static extern void ChangeIcon(string executableFile, string iconFile,
ushort imageCount);
然后我称之为:
ushort imageCount = 2;
ChangeIcon("filePath", "iconPath", imageCount);
应用程序执行该功能就好了;但是,会弹出带有以下文本的消息:
托管调试助手“PInvokeStackImbalance”检测到“foo.exe”存在问题。 附加信息:对 PInvoke 函数“bar.IconChanger::ChangeIcon”的调用使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
如果我不传最后一个参数,消息没有弹出,所以一定是传短类型的原因。我也尝试过使用 int,出现相同的消息。
显然,我在传递这个数字参数时做错了。两者之间如何匹配参数?
【问题讨论】:
标签: c# c++ pinvoke dllimport parameter-passing