无法找到名为的入口点

Tim*_*Tim 5 c# c++ pinvoke

我正在用 c# 编写一个应用程序,该应用程序使用用 cpp 编码的第三方 dll。我对 dll 进行了多次调用,除了一个之外,它们都在工作。

我的代码通过以下方式进行调用:

return ObjectGetStringEntryID(pObject, strEntryID, strEntryID.Capacity);

[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern bool ObjectGetStringEntryID(IntPtr pObject, StringBuilder strEntryID, int nMaxLength);
Run Code Online (Sandbox Code Playgroud)

由于我可以访问源代码,我知道它包含以下定义:

BOOL ObjectGetStringEntryID(CMAPIObject* pObject, LPTSTR szEntryID, int nMaxLength)
Run Code Online (Sandbox Code Playgroud)

如前所述,我使用相同的格式对该 dll 进行了几次其他调用,并且它们都是成功的。

因此,如果有帮助的话,我有以下设置:

public const CharSet DefaultCharSet = CharSet.Ansi;
Run Code Online (Sandbox Code Playgroud)

有人看到我在通话中可能做错了什么吗?同班的我打电话:

MessageGetSubject(pObject, strSubject, strSubject.Capacity);

[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern void MessageGetSubject(IntPtr pMessage, StringBuilder strSubject, int nMaxLength);
Run Code Online (Sandbox Code Playgroud)

与方法匹配:

void MessageGetSubject(CMAPIMessage* pMessage, LPTSTR szSubject, int nMaxLength)
Run Code Online (Sandbox Code Playgroud)

这来自 c# 和 cpp 中与不起作用的调用相同的类,但它工作得很好。它的调用方式似乎没有任何区别,因此它们都应该工作或不工作。

如果有人对我做错了什么有任何见解,我将非常感谢您的帮助。

Ter*_*ver 3

EntryPointNotFoundException表示该符号ObjectGetStringEntryID不是由 DLL 导出的。检查导出文件(或 __declspec 声明)以确保它已导出,并且按该名称导出。

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