64 ビット C# (および C++) アプリケーションで使用するには、32 ビット dll を移行する必要があります。dll はアンマネージ Delphi コードで記述されています。dll を再コンパイルできません。唯一の方法は、プロセス間通信 (IPC) を使用することです。長い間検索しましたが、多くの情報が見つかりませんでした。私が見つけた最良のガイドは、このリンクにあります: Accessing 32-bit DLLs from 64-bit code .
このフォーラムでは非常に頻繁に引用されているため、目標を達成するためにこのガイドに従いました。したがって、ガイドでは、次の 3 つの手順を実行する必要があると説明しています。
1° STEP - 32 ビット DLL をロードして呼び出す COM オブジェクトを実装する 32 ビット コンポーネントを作成し、32 ビット DLL インターフェイスを COM インターフェイスとして公開します。だから私はここで説明したのと同じことをしました(前のリンクから取られた例):
[ComVisible(true), GuidAttribute("137AD71F-4657-4362-B9E4-C6D734F1F530")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IGetMyString
{
string GetMyString();
}
[ComVisible(true), GuidAttribute("89BB4535-5A89-43a0-89C5-19A4697E5C5C")]
[ProgId("CallPDW.Class1")]
[ClassInterface(ClassInterfaceType.None)]
public class Class1 : IGetMyString
{
string GetMyString()
{
......
}
}
次に、.NET COM アセンブリを登録する必要があるため、Regasm.exe を使用する必要がありますが、代わりに、MSI ファイルをビルドして Regasm と同じことを行う Visual Studio のセットアップおよび展開プロジェクトを作成しました。次に、レジストリ エディターを制御し、HKEY を見つけて動作させました。したがって、このステップまではすべて問題ないか、問題ないように見えます。
2° STEP - この COM コンポーネントをアウト プロセス (OOP) 用に構成するには、標準の COM+ OOP アプリケーションを作成します (代理プロセスとして dllhost を使用)。
3° STEP - 元の 32 ビット DLL と同じインターフェイスを実装する 64 ビット ラッパー DLL を作成し、上で作成した COM オブジェクトの COM インターフェイスをインポートし、公開されたインターフェイスへの現在の呼び出しを COM オブジェクト インターフェイスへの呼び出しに変換します。呼び出しパラメーターを転送し、戻り値を受け取り、それらを呼び出し元に委任します。
問題は、2° と 3° の STEP を達成する方法がわからないことです。これについては、Web またはフォーラムで何も見つからないためです。したがって、ステップ 2° と 3° を達成するために助けが必要です。他の投稿などへのリンクもOKです。よろしくお願いします。
その他の情報 (2016 年 12 月 10 日 - 午後 11 時 10 分): この DLL は、次の 2 つのインターフェイスを介してその関数を 32 ビット ネイティブ環境に公開します。1.) 関数ポインターを含む C/C++ ヘッダー (WINAPI*) 2.) .NET P/Invoke とのインターフェース