启用调用非托管方法 - "Unable to find an entry point named 'XXX' in DLL 'XXX.dll'."
Enable to call unmanaged method - "Unable to find an entry point named 'XXX' in DLL 'XXX.dll'."
我试图在 C# 控制台应用程序项目中使用用 C 编写的 dll 中的方法。
这是我得到的 h 文件中的方法签名:
DLL_PUBLIC sint AshrAPI_TranRecToRefunISO(char* TranRec , byte* RefunISO , usint* ISOLength);
我用P/Invoker在C#中创建了相应的方法:
[DllImport(@"Ashrait.dll", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
[return: MarshalAs(UnmanagedType.I2)]
internal static extern short AshrAPI_TranRecToRefunISO([MarshalAs(UnmanagedType.LPStr)] string TranRec, [MarshalAs(UnmanagedType.LPArray)] byte[] RefunISO, ushort ISOLength);
但无论我尝试使用哪种 UnmanagedType,我总是得到相同的异常:
无法在 DLL 'XXX.dll
中找到名为 'XXX' 的入口点
谁能看出哪里不对?
找到问题了!因为我将 dll 作为项目加载到项目而不是作为参考,所以我将它放在项目内的资源文件夹中。
一旦我将 dll 移动到根项目文件夹,一切都开始工作:)
我试图在 C# 控制台应用程序项目中使用用 C 编写的 dll 中的方法。 这是我得到的 h 文件中的方法签名:
DLL_PUBLIC sint AshrAPI_TranRecToRefunISO(char* TranRec , byte* RefunISO , usint* ISOLength);
我用P/Invoker在C#中创建了相应的方法:
[DllImport(@"Ashrait.dll", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
[return: MarshalAs(UnmanagedType.I2)]
internal static extern short AshrAPI_TranRecToRefunISO([MarshalAs(UnmanagedType.LPStr)] string TranRec, [MarshalAs(UnmanagedType.LPArray)] byte[] RefunISO, ushort ISOLength);
但无论我尝试使用哪种 UnmanagedType,我总是得到相同的异常: 无法在 DLL 'XXX.dll
中找到名为 'XXX' 的入口点谁能看出哪里不对?
找到问题了!因为我将 dll 作为项目加载到项目而不是作为参考,所以我将它放在项目内的资源文件夹中。 一旦我将 dll 移动到根项目文件夹,一切都开始工作:)