VS2005 .NET Framework 2.0 で作成した WinForms プロジェクトに問題があり、VS2012 .NET Framework 4.5 にアップグレードしました。私のプロジェクトでは、サードパーティの DLLDllImport
を使用し、それらのすべてのドキュメントを持っていたので、その関数を使用しました。
問題は、VS2005 .NET Framework 2.0 で正常に動作するインポートされた DLL の関数の 1 つが 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 でサポートされていませんか?