“无法在 dll 中找到名为 \[function\] 的入口点”(c 到 c# 类型转换)

新手上路,请多包涵

我有一个来自第三方的 dll,它是用 C++ 编写的。以下是来自 dll 文档的一些信息:

 //start documentation

RECO_DATA{
wchar_t Surname[200];
wchar_t Firstname[200];
}

描述:接收函数结果的数据结构。所有函数结果都将存储为 Unicode (UTF-8)。

方法:

 bool recoCHN_P_Name(char *imgPath,RECO_DATA *o_data);

输入:

 char * imgPath

此函数要识别的图像位置的完整路径

RECO_DATA * o_data

用于接收函数结果的数据对象。函数返回:成功则返回真,否则返回假。

 //end documentation

我正在尝试从我的 C# 应用程序中调用 recoCHN_P_Name。为此,我想出了这段代码:

导入dll的代码:

     public class cnOCRsdk
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct RECO_DATA{
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=200)]
        public string FirstName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
        public string Surname;
        }

    [DllImport(@"cnOCRsdk.dll", EntryPoint="recoCHN_P_Name")]
    public static extern bool recoCHN_P_Name(byte[] imgPath, RECO_DATA o_data);
}

调用函数的代码:

             cnOCRsdk.RECO_DATA recoData = new cnOCRsdk.RECO_DATA();

        string path = @"C:\WINDOWS\twain_32\twainrgb.bmp";

        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        byte[] bytes = encoding.GetBytes(path);

        bool res = cnOCRsdk.recoCHN_P_Name(bytes, recoData);

我得到的错误是““无法在 DLL ‘cnOCRsdk.dll’ 中找到名为 ‘recoCHN_P_Name’ 的入口点。”我怀疑我在将类型从 C++ 转换为 C# 时出错。但是究竟在哪里……?

原文由 Evgeny 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

首先确保函数实际被导出:

在 Visual Studio 命令提示符中,使用 dumpbin /exports whatever.dll

原文由 i_am_jorf 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于 DLL 和您的应用程序之间的字符串编组不匹配,您可能会收到此错误。例如,一个是使用 ANSI,另一个是 unicode。

你可以尝试这样的事情:

  [DllImport("yourDLL.dll", CharSet = CharSet.Unicode )]
 public static extern String YourFunction(String name);

此处 结帐以获取其他可能原因的列表。

原文由 majed 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题