我在我刚刚升级到VS2012 .NET Framework 4.5的VS2005 .NET Framework 2.0中创建的WinForms项目存在问题。在我的项目中,我使用了DllImport
的第三方DLL,并使用了它的功能,因为我有他们的所有文档。C#,DLL导入API在VS2012中无法正常工作.NET Framework 4.5中
问题是导入的DLL中的一个函数,它在VS2005中正常工作.NET Framework 2.0在VS2012 .NET 4.5中不起作用。
以下是从我的项目,我的代码片段:
[DllImport("W5EditLD.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "K5GetClassName")]
public static extern string GetClassName();//Dll import definition
public string _GetClassName()
{
return GetClassName();//wrapper function to DLL import function
}
string sClassName = _GetClassName();//where i call API via wrapper method,**
上面的代码片段工作正常,在VS2005的.NET Framework 2.0 但是当我升级我的项目到VS2012的.NET Framework 4.5我必须这样做的采用以下方式:
[DllImport("W5EditLD.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "K5GetClassName")]
public static extern IntPtr GetClassName();//Dll import definition
public IntPtr _GetClassName()
{
return GetClassName();//wrapper function to DLL import function
}
IntPtr ptr = _GetClassName();//where i call API via wrapper method,
string sClassName = System.Runtime.InteropServices.Marshal. PtrToStringAnsi(ptr);
这是为什么? VS2012 .NET Framework 4.5不支持自动字符串编组吗?
你说你“有”以不同的方式做到这一点。为什么?如果您尝试以相同的方式执行操作,您是否收到错误消息?如果是这样,那么错误信息是什么?如果不是,那么是什么导致你断定你“有”以不同的方式去做? –
尝试将CharSet定义添加到DllImport。顺便说一句,你没有写,究竟是“不工作” - 崩溃,不正确的结果? –
@AlexFarber没有CharSet定义,默认是ANSI。很明显,返回的文本是使用'PtrToStringAnsi'的ANSI文件。 –