私は、LoadLibrary()を使用して動的にロードする必要があり、__cdecl呼び出し規約を使用するサードパーティのDLLを持っています。 VB6からdllを使用できるようにする必要があるので、__stdcall呼び出し規約を使用し、必要な関数をエクスポートする独自のラッパーDLLを作成しました。サードパーティのDLLをラップする
追加の要件が今すぐに到着しました。管理方法を確認するのに苦労しています。ラップされたDLLは別のアプリケーションにAPIを提供し、アプリケーションの2つのインスタンスに同時に接続する必要があります。
tpc_connect("service1")
// Do some stuff
tpc_disconnect()
をし、私が行うことができるために必要なもの
session1 = tpc_connect("service1")
session2 = tpc_connect("service2")
// Do some stuff with session1
// Do some stuff with session2
tpc_disconnect(session1)
tpc_disconnect(session2)
主な問題としてある:DLLは、セッションの概念がないので、これは問題である、典型的な相互作用は次のように希望します1つのプロセスが1つのサービスにしか接続できないことがわかったので、私が試みた最初の解決策は、ATLを使用してOut-of-Process COMサーバーを作成してDLLラッパーを別のプロセスに移動することでした。私が今問題となっているのは、COMサーバーのインスタンスが1つしかないということです。
私の質問(最終的には)は、ATL COMサーバーの新しいインスタンスを強制的に作成する方法ですか?これは問題への最善のアプローチですか、誰かがこれに取り組むためのより良い方法を考えることができますか?
おかげジャクソン
ラッパーの実装が完了しました - コピーの代わりにCreateHardLinkを使用しましたが、私にとってはうまくいきませんでした。そのため、最後にDLLの完全コピーが付属していました。 – Jackson
CreateHardLinkは、NTFSドライブでターゲットがソースと同じパーティションにある場合にのみ機能します。私のラッパーでは、まずCreateHardLinkを試してみます。これはファイルコピーを避け、高速になりますが、失敗した場合は実際のコピーを行います。あなたを助けてくれてうれしいです。 – brofield