問題タブ [comvisible]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1947 参照

c# - com に表示される dll マネージ コードをデバッグする

ネイティブ Win32 プログラムから呼び出される COM 可視 dll を作成しました。デバッグの目的で、単純な WinForms クライアントを dll を含むソリューションに追加しました。

dll にブレークポイントを設定すると、そのブレークポイントにヒットしますが、コードをステップ実行できません。デバッガーは常に dll の次のブレークポイント、または呼び出し後のクライアントのコードの最初の行にジャンプします。 dll.

デバッガーで dll コードをステップ実行するにはどうすればよいですか?

「マイコードのみを有効にする」オプションではないかと思いましたが、設定されていません。

jdv を更新 すると、プロジェクトのプロパティで「アンマネージ コードのデバッグを有効にする」を設定することが提案されましたが、望ましい効果はありませんでした。

ありがとう、ミエル。

0 投票する
1 に答える
532 参照

c# - javascriptでC#関数を呼び出す可能性はありますか?

私はオフィスアドインを作成し、関数:openFile(String path)があり、オフィスアドインにブラウザオブジェクトを埋め込み、それを使用してオフィスアドインにWebページを埋め込むことができます。これでC#を呼び出すことができます。関数"openFile"を実行し、javascriptを使用してWebページのパスを渡し、指定されたファイルをOfficeに開かせます。これは可能ですか?私に何ができる ?

0 投票する
1 に答える
985 参照

c# - 複数のインターフェイスが機能しないObjectForScripting

ObjectForScriptingを介してWebBrowserControlと対話するWinFormがあります。WinFormの基本クラスはComVisibleではなく、変更できないか、変更しません。NonComVisibleBaseClassがあるため、インターフェイスを作成してComVisible(true)に設定し、FormAttribute [ClassInterface(ClassInterfaceType.None)]を設定しました。インターフェイスのメソッドはJavaScriptで呼び出すことができます。そしてそれは完璧に機能します:

しかし今、私の問題。インターフェイスには複数の機能が含まれています。個別のタスクグループ化のためにインターフェイスを分離したい。そのため、ロギング関数を含むインターフェースと、DataAccess関数などのインターフェースが必要です。

したがって、次のようになります。

しかし、これを行うと、2番目のインターフェイス(ILogging)の機能にJavascriptからアクセスできなくなります。インターフェイスの順序を切り替えると、IDataAccess関数にアクセスできなくなります。

したがって、Javascriptでは最初のインターフェイスのメソッドにのみアクセスできる場合があります。

各インターフェイスのすべての機能にアクセスできるようにするにはどうすればよいですか?繰り返しになりますが、BaseClassをComVisibleにし、ClassInterface属性を削除することは機能しますが、オプションではありません。

前もって感謝します!!

0 投票する
1 に答える
957 参照

visual-studio - 昇格を必要としない VS なしで COM 可視型を使用して .NET DLL を構築することは可能ですか?

プロジェクト内のアセンブリには、ComVisible(true) でマークされた型があります。

(昇格されていない) ビルド時に、VS はその DLL を登録しようとして失敗します。

アセンブリ "\path\to\foo.dll" を登録できません - アクセスが拒否されました。管理者としてアプリケーションを実行していることを確認してください。レジストリ キー 'HKEY_CLASSES_ROOT\CLSID{FFC174A1-CC90-4E25-A3F6-C30B03368250}' へのアクセスが拒否されました。

ビルド マシンに DLL を登録する必要はありません。エンドユーザー向けにインストールするときにのみ登録します。

では、DLL を登録せずにビルドすることは可能ですか?

0 投票する
1 に答える
2170 参照

c# - CA1017 VS2010 StyleCop での ComVisible 関連のエラー

ComVisible false にする必要があるという StyleCop の CA1017 エラー メッセージが表示されます。

次に、[assembly: ComVisible(false)]最上位の名前空間の前にコードを配置します。ただし、他のエラー メッセージと共に同じエラーが表示されます。

VS2010もこの名前を認識していないようです。

ここに画像の説明を入力

これの何が問題なのですか?

0 投票する
4 に答える
3772 参照

c# - ComVisible .NET アセンブリと app.config

  • としてマークされたいくつかのクラスを持つ.NETアセンブリがありますComVisible
  • このアセンブリはに登録されていますregasm /codebase "assembly_path"
  • MyAssemblyName.dll.configアセンブリのフォルダーにあるapp.config 名 (実際には - ) があります。
  • アセンブリの appSettings にアクセスしますConfigurationManager.AppSettings["SettingName"]
  • COMオブジェクトを作成するVBScriptファイルがありますCreateObject("...")
  • オブジェクトが (VBScript から) 作成されると、ConfigurationManager.AppSettings["SettingName"]null を返します。アセンブリが構成ファイルを認識していないようです。

実行可能にするにはどうすればよいですか?

0 投票する
2 に答える
1642 参照

.net - VB6アプリ用のCom-VisibleDLLのデバッグ

VB6で作成されたアプリを更新しています。VS2010で新しいコードを記述し、DLLに保存したいと思います。しかし、DLLコードをデバッグする方法がわかりません。VS2010のテストアプリからDLLコードにステップインすることはできますが、VB6の実際のアプリからはステップインできません。何かご意見は?

0 投票する
0 に答える
582 参照

.net - Delphiの空の文字列をcomvisible.netアセンブリに渡す方法

2つの文字列パラメーターを受け取るメソッドを持つComVisibleクラスを含むC#アセンブリがあります。アセンブリを登録し、DelphiXE2の[コンポーネントのインポート]コマンドを使用してインポートしました。

C#インターフェイスは次のようになります。

インポートされたDelphiインターフェイスは次のようになります。

Delphiからコードが呼び出される方法の例を次に示します。

Delphiアプリケーションからメソッドに空の文字列を渡さない限り、すべてが100%機能します。すると、.Net側で次のエラーが発生します。

InvalidVariantが検出されましたメッセージ:アンマネージドVARIANTからマネージドオブジェクトへの変換中に無効なVARIANTが検出されました。無効なVARIANTをCLRに渡すと、予期しない例外、破損、またはデータ損失が発生する可能性があります。

理想的には、Delphi側から空の文字列''を使用してメソッドを呼び出し、.Net側でstring.IsNullOrEmpty(guid)を実行してこの状態をチェックできるようにします。これまでのところ、Delphiから''の代わりに#0をメソッドに渡すことしかできませんでしたが、.Net側では、値は"\ 0"になり、nullでも空でもありません。

これに対処するための正しいアプローチは何ですか?

ありがとう。

0 投票する
1 に答える
1722 参照

wpf - WPFWebBrowserを使用してObjectForScriptingに辞書を渡す

WPFのコンポーネントを使用してWebBrowserJavaScript+HTMLをホストしており、カスタマイズ可能なオブジェクトをプロパティとして渡せるようにしたいと考えていObjectForScriptingます。私の最終目標は、で実行されているjavascriptが次のWebBrowserようなものを呼び出すことができるようにすることです。

プロパティを持つにComVisible設定されたクラスを実装することで、これに近い何かを達成できます。truelookup

ただし、渡すメンバーについては柔軟に対応したいObjectForScriptingので、各プロパティを事前に指定することはできません。

理想的には、渡す名前とオブジェクトのペアを指定したいのですが、これは機能しません。

私がこれまでに試した(そして失敗した)こと:

  • Dictionary<string,object>私のコンテキストとしてを使用する
  • その拡張子を使用すると、Dictionary<string,object>としてマークされますComVisible
  • を使用してExpandoObject
  • を使ってList<KeyValuePair<string,object>>
  • その拡張子を使用すると、 List<KeyValuePair<string,object>>としてマークされますComVisible

不足しているカスタマイズ可能なものObjectForScriptingをWPFに渡す方法はありますか?WebBrowser

0 投票する
2 に答える
3341 参照

c# - PHP からのクラス登録エラー

C# クラス ライブラリ アセンブリを作成し、PHP からメソッドを呼び出せるように COM で表示できるようにしました。これは以前は正常に機能していましたが、Windows Server 2008 サーバーにインストールしようとすると、「クラスが登録されていません」というエラーが表示され続けます。

依存関係の問題を排除するために、C# で小さなテスト クラス ライブラリを作成しました。クラス ライブラリは任意の CPU 用に構築されており、COM に表示されます (AssemblyInfo.cs で COMVisible を true に設定します)。テスト クラス ライブラリには、1 つのメソッドを持つ 1 つのクラスのみが含まれます。クラスは TestLib と呼ばれ、名前空間も TestLib と呼ばれます。このメソッドは Test と呼ばれ、文字列のみを返します。

- TestLib.dll をビルド - Windows Server 2008 マシンにコピー - dll を次のように登録: regasm /codebase TestLib.dll - regasm ツールが成功メッセージを返す - PHP では単純に新しい COM インスタンスを作成します。

  • ブラウザまたはコマンドライン (php -f test.php) からこのテスト スクリプトを呼び出すと、どちらの場合も「クラスが登録されていません」というエラーが表示されます。

また、gacutil -i を使用して TestLib を GAC に追加しようとしましたが、役に立ちませんでした。まだクラスが登録されていないエラーです。

次に、ターゲット フレームワークとして 4.0 ではなく .NET 2.0 を使用してテスト ライブラリをコンパイルしようとしましたが、同じ結果になりました。ちなみにサーバーには.NET Framework 4.0がインストールされています。

何か案は?