0

Intraweb ISAPI アプリケーションを作成しました。dll をビルドした後、IIS 上に Web サイトとアプリケーション用のプールを作成しました。Inetpub ディレクトリでは、インターネット ゲスト アカウントと IIS_WPG アカウントのアクセス許可が設定されています。

IE ( http://ip.0.0.1/website/application.dll )から Web ページにアクセスしようとすると、HTTP 500または

ここに画像の説明を入力

エラー。インターネットで検索したところ、COM の初期化の問題であることがわかりました。ただし、アプリケーションのデータモジュールには次のコードがあります。

initialization
  CoInitialize(nil);

finalization
  CoUninitialize;

誰でもアドバイスできますか?

4

1 に答える 1

3

独自の CoInitliaze 呼び出しを使用しないでください。代わりに ServerController を使用し、ComInitialization プロパティを ciMultiThread に設定します。

私の IntraWeb Courseware マニュアルから: 「アプリケーションで (D)COM の使用が必要な場合は、タイプ TComInitialization (ciNone、ciNormal、ciMultiThread) の ComInitialization プロパティが必要です。IntraWeb は異なるスレッドで要求を実行するため、各スレッドは独自の呼び出しを行う必要があります。 CoInitialize. デフォルトでは、このプロパティは ciNone に設定されており、COM サポートが必要ないことを示します. COM サポートが必要な場合 (たとえば、DataSnap サーバーに接続する場合) は、ComInitialization を ciNormal または ciMultiThreaded に設定する必要があります. 個人的には、ISAPI DLL 内で何らかの方法で COM を操作する場合、ciMultiThreaded に設定しない理由は見つかりませんでしたが、IIS 6 以降では、必要な ComInitialization が既に処理されている可能性があり、ciNone に設定する必要があります (ただし、他の値に設定すると無視されるように見えますが、したがって、ciMultiThread も問題ありません)。」

于 2011-04-20T08:01:45.800 に答える