次の手順を持つJavaアプリケーションがあります(最小限に抑えられています)。
public void connect()
{
System.loadLibrary("asyncconn");
pfcAsyncConnection.AsyncConnection_Connect(null, null, null, timeout);
}
別のクラスで
package very.long.namespace.pfcAsyncConnection;
public class pfcAsyncConnection
{
public static native AsyncConnection AsyncConnection_Connect(String paramString1, String paramString2, String paramString3, Integer paramInteger)
throws jxthrowable;
}
JavaコードをC#に変換したいのですが、これを実行しました。
public void connect()
{
pfcAsyncConnection.AsyncConnection_Connect(null, null, null, timeout);
}
public static class pfcAsyncConnection
{
[DllImport("asyncconn.dll")]
public static extern AsyncConnection AsyncConnection_Connect(String s1, String s2, String s3, Int32 i4);
}
「DLLasyncconn.dllで「AsyncConncetion_Connect」という名前のエントリポイントが見つかりません」というエラーが表示されます。
DLLはC/C ++で記述されていますが、コンパイル時にメソッド名が壊れることがあることは知っています。IIがC#を見逃したのか、それとも単に間違ったDLLをロードしただけなのか、誰か教えてもらえますか?ありがとう。
更新:dumpbin \exports asyncconn.dll
マングルされた名前を取得するため
にチェックした後、メソッドを呼び出すことができるようになりvery_long_namespace_AsyncConnection_1Connect()
ました。問題は、Javaがメソッド名を構築するためにどのようなメカニズムを使用するかということです。