2

ms axapta 2009で使用しようとしている.net activeXに苦労しています。

このコンポーネントをコンパイルしたローカル マシンで使用すると、問題なく動作します。フォームにactiveX要素として追加でき、メソッドとイベントはaxapta-activeX-explorerにリストされており、問題なく操作できます。

しかし、dll を他のクライアントに配布しようとしても、意図したとおりに機能しません。regasm /codebase /tlb を介した dll の登録は正常に機能します - メッセージが表示され、登録は成功しました。コンポーネントは、ax に追加する activeX 要素を選択するときにもリストされますが、関数もプロパティもリストされません。フォームを起動すると、エラーメッセージが表示されます - activeX component CLSID ... システムに見つかりません、インストールされていません。classID は確かに .net で定義されたものです。

タスクマネージャーを見てみると、奇妙なことが起こります。activeX コンポーネント自体は、com アプリケーションと対話するための単なるラッパーです。動作しない_not_installed_で ax-form を起動すると!! activeX-thing、タスクマネージャーは、activeX によってインスタンス化された com-application の新しいプロセスを示します:/

私が試したこと:

  • \Windows\Microsoft.NET\Framework\v2.0.50727 など、異なるバージョンの regasm を使用する。C:\Windows\Microsoft.NET\Framework64\v2.0.50727
  • レジストリから古いものを削除する前に、.net で新しい GUID を使用する
  • さまざまなバージョンの .net フレームワークを使用してコンパイルする
  • regasm、regasm /codebase、regasm /codebase /tlb、visual-studio-setup を使用して登録を行う
  • コマンドラインから管理者として登録を実行する
  • 管理者としてセットアップを実行する
  • クライアントマシンで管理者として axe を実行する
  • dll を別のフォルダーに移動してから、新しい登録を行います ( windows/system32; ax/client/bin )
  • GAC へのインストール ( gacutil /i )
  • Visual Studio のさまざまなプロジェクト オプション (COM-Visibility、COM-Interop に登録、別の targetPlatform )

COM-Interop オプションの登録を有効にして Visual Studio でコンパイルすると、regasm-registration だけでなく、コンパイル中に発生したレジストリ アクティビティをログに記録するために registry-monitor-microsoft-tool を使用したという事実を期待しました。

さらに、これらのログを使用してターゲットクライアントにすべてのレジストリエントリを作成しても機能しませんでした。

ヒントやヘルプをいただければ幸いです。これが何日も私をブロックしています:(

4

3 に答える 3

2

COM 統合の概要については、次を参照してください。

http://msdn.microsoft.com/en-us/library/aa591337.aspx

.Net 統合の概要については、次を参照してください。

http://msdn.microsoft.com/en-us/library/aa659581.aspx

于 2010-06-08T07:55:02.843 に答える
1

問題が解決しました。すべてが正しかった - 誤解を招くのは、activeX コンポーネントが追加されたフォームを起動する際のエラー メッセージであり、「システム上にコンポーネントが見つかりません...」というメッセージが表示されました。

これは、activeX コードではまったく異なるエラーでした。特殊文字を含む xml ドキュメントを解析し、xml ファイルで正しい iso エンコーディングを定義せずにエラーをスローすると、キャッチされませんでした。これ(!!)は、最初の投稿で言及されたすべての問題とクラッシュバグを引き起こしました:/

とにかく助けてくれてありがとう。

于 2010-07-01T08:41:22.227 に答える
1

私が対話したい「ターゲット」アプリケーションは、COM機能を備えたスタンドアロンのexeです。私が知っているように、COM は AX 2009 でサポートされていない (またはサポートされない) ため、.net を使用する必要があります。あなたの答えが正しく理解できれば、あと 1 ラウンドです! dll は、上記のアプリケーションにアクセスするためのラッパーとして機能します。登録には regasm を使用する必要があるため、regsvr32 は dll では機能しません。AOT にも参照を追加しました - 変更はありません。興味深いことに、それはすでに機能しており、私のローカル開発システムではまだ機能しています。他のシステムではありません。

于 2010-06-01T13:29:57.547 に答える