我正在编写一款使用第三方cpp编码的dll的c#应用程序。我的代码对该dll进行了多次调用,除了其中一个方法之外,所有其他方法都能正常工作。
我以以下方式调用该方法:
return ObjectGetStringEntryID(pObject, strEntryID, strEntryID.Capacity);
[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern bool ObjectGetStringEntryID(IntPtr pObject, StringBuilder strEntryID, int nMaxLength);
由于我可以访问源代码,我知道其中包含以下定义:
BOOL ObjectGetStringEntryID(CMAPIObject* pObject, LPTSTR szEntryID, int nMaxLength)
如之前所述,我使用相同的格式多次调用此dll,并且它们都成功了。
因此,如果有帮助,我有以下设置:
public const CharSet DefaultCharSet = CharSet.Ansi;
有人能看出我在调用时做错了什么吗?我从同一个类中调用:
MessageGetSubject(pObject, strSubject, strSubject.Capacity);
[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern void MessageGetSubject(IntPtr pMessage, StringBuilder strSubject, int nMaxLength);
这与该方法相匹配:
void MessageGetSubject(CMAPIMessage* pMessage, LPTSTR szSubject, int nMaxLength)
这段代码来自于c#和cpp中相同的类,与不能正常工作的调用一样,但是它可以正常运行。看起来它们的调用方式没有任何区别,所以它们应该都能正常工作或者都不能正常工作。
如果有人知道我哪里做错了,请帮忙指出,非常感谢!
EntryPointNotFoundException
表示 DLL 没有导出ObjectGetStringEntryID
符号。请检查导出文件(或 __declspec 声明)以确保它被正确导出,并且名称正确。您还可以使用 Depends 工具查看 DLL 的导出。 - Tergiver