无法找到名为的入口点

5

我正在编写一款使用第三方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中相同的类,与不能正常工作的调用一样,但是它可以正常运行。看起来它们的调用方式没有任何区别,所以它们应该都能正常工作或者都不能正常工作。

如果有人知道我哪里做错了,请帮忙指出,非常感谢!


我在那里放置了第二个示例,以显示我是以相同方式调用的,并且它正在工作。这不是dll找不到的问题。在另一个类中,我有使用发送所有相同变量的调用。对于这些,唯一的区别是方法名称,但它们也被正确调用。 - Tim
你是想传递 StringBuilder 还是打算传递一个字符串? - Pete
@Pete,文档说需要传递StringBuilder。我也觉得很奇怪,但是在其他具有类似签名的方法中它可以工作。 - Tim
我收到了一个异常:发生了类型为“System.EntryPointNotFoundException”的第一次机会异常。 - Tim
EntryPointNotFoundException 表示 DLL 没有导出 ObjectGetStringEntryID 符号。请检查导出文件(或 __declspec 声明)以确保它被正确导出,并且名称正确。您还可以使用 Depends 工具查看 DLL 的导出。 - Tergiver
显示剩余13条评论
1个回答

3

EntryPointNotFoundException是指该DLL没有导出符号ObjectGetStringEntryID。请检查导出文件(或__declspec声明),确保以该名称导出。

这可能会有所帮助:从DLL进行导出


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接