わかりました、これは私が頭を抱えているので、暗闇の中でのショットです。私は、VB6 でうまく機能するサードパーティの DLL を 2 つ持っていますが、VB.NET や C# ではあまり機能しません。
VB6 では、以下は問題なく動作します。
Dim oApplication As Object
Dim oSession As Object
Dim vRetCode As Variant
Set oApplication = CreateObject("OAPPLICA.OAPPLICA")
Set oSession = CreateObject("OSESSION.OSESSION")
oApplication.PROGRAMDRIVE = "\\dev\data\"
oApplication.WORKAREADRIVE = "\\dev\data\workarea\"
oApplication.DATADRIVE = "\\dev\data\"
oApplication.IMAGEDRIVE = "\\dev\data\image\"
oSession.MYAPPLICATION = oApplication
vRetCode = oSession.LOGIN("USER1", "PASSWORD1") 'Returns zero if successful
MsgBox (vRetCode)
このまったく同じコード セットを VB.NET で実行すると、「oSession.MYAPPLICATION = oApplication」行に「Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))」が表示されます。
VB.NET と C# の両方で早期バインディングも試みましたが、最終的には別の行で同じエラーが発生します。以下の「oApplication.set_PROGRAMDRIVE("\\dev\lifepro\data\");」で同じエラーが発生します。ライン。
private OAPPLICA.OAPPLICA oApplication = new OAPPLICA.OAPPLICA();
private OSESSION.OSESSION oSession = new OSESSION.OSESSION();
Int64 iReturnCode;
oApplication.set_PROGRAMDRIVE("\\\\dev\\data\\");
oApplication.set_WORKAREADRIVE("\\\\dev\\data\\workarea\\");
oApplication.set_DATADRIVE("\\\\dev\\data\\");
oApplication.set_IMAGEDRIVE("\\\\dev\\data\\image");
m_oSession.set_MYAPPLICATION(m_oApplication);
iReturnCode = Convert.ToInt64(m_oSession.LOGIN("USER1", "PASSWORD1"));
前述のように、2 つの DLL (OAPPLICA.dll と OSESSION.dll) はサード パーティ製であり、サード パーティ製のレガシ システムへのエントリ ポイントを許可します。レガシーであるため、サードパーティにアクセスできなくなったため、既存の Windows VB6 アプリケーションを .NET Web アプリケーションに変換するプロトタイプを作成することを任されました。私の推測では、.NET が 2 つの COM オブジェクトの相互運用 DLL を解釈する際に問題が発生しているのですが、方向性を示すものを見つけることができませんでした。