私のプロジェクトは、.NET Frame work 3.5でエラーなしに正常に実行されました。しかし、.NET Frame work 4をターゲットにすると、エラーが発生しました。
"PInvoke関数の呼び出しでスタックのバランスが崩れました。これは、管理されたPInvokeシグネチャが管理されていないターゲットシグネチャと一致しないためと考えられます。"
以下のようにアンマネージライブラリを使用しました。
[StructLayout(LayoutKind.Sequential )]
public class DGNElemCore
{
public int offset;
public int size;
public int element_id;
public int stype;
public int level;
public int type;
public int complex;
public int deleted;
public int graphic_group;
public int properties;
public int color;
public int weight;
public int style;
public int attr_bytes;
public IntPtr attr_data;
public int raw_bytes;
public IntPtr raw_data;
}
[DllImport("DgnLib.dll", EntryPoint = "DGNOpen")]
public static extern IntPtr DGNOpen(string fileName, int bUpdate)
このエラーを修正する方法を知っていますか?
これをdllインポートとともに追加します。
, CallingConvention = CallingConvention.Cdecl)]
here から取得。
プラットフォーム呼び出し
アンマネージコードとの相互運用性のパフォーマンスを向上させるために、プラットフォーム呼び出しでの誤った呼び出し規約により、アプリケーションが失敗するようになりました。以前のバージョンでは、マーシャリング層はこれらのエラーをスタックまで解決しました。
Microsoft Visual Studio 2010でアプリケーションをデバッグすると、これらのエラーが警告され、修正できます。更新できないバイナリがある場合は、アプリケーションの構成ファイルに要素を含めて、以前のバージョンと同様に、スタックで呼び出しエラーを解決できるようにすることができます。ただし、これはアプリケーションのパフォーマンスに影響を与える可能性があります。
DLLをインポートしているときに、CallingConvention.ThisCallを追加しました。
他の定数を試してみて、どれがあなたの環境で機能するかを確認してください