問題タブ [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.
c# - com に表示される dll マネージ コードをデバッグする
ネイティブ Win32 プログラムから呼び出される COM 可視 dll を作成しました。デバッグの目的で、単純な WinForms クライアントを dll を含むソリューションに追加しました。
dll にブレークポイントを設定すると、そのブレークポイントにヒットしますが、コードをステップ実行できません。デバッガーは常に dll の次のブレークポイント、または呼び出し後のクライアントのコードの最初の行にジャンプします。 dll.
デバッガーで dll コードをステップ実行するにはどうすればよいですか?
「マイコードのみを有効にする」オプションではないかと思いましたが、設定されていません。
jdv を更新 すると、プロジェクトのプロパティで「アンマネージ コードのデバッグを有効にする」を設定することが提案されましたが、望ましい効果はありませんでした。
ありがとう、ミエル。
c# - javascriptでC#関数を呼び出す可能性はありますか?
私はオフィスアドインを作成し、関数:openFile(String path)があり、オフィスアドインにブラウザオブジェクトを埋め込み、それを使用してオフィスアドインにWebページを埋め込むことができます。これでC#を呼び出すことができます。関数"openFile"を実行し、javascriptを使用してWebページのパスを渡し、指定されたファイルをOfficeに開かせます。これは可能ですか?私に何ができる ?
c# - 複数のインターフェイスが機能しないObjectForScripting
ObjectForScriptingを介してWebBrowserControlと対話するWinFormがあります。WinFormの基本クラスはComVisibleではなく、変更できないか、変更しません。NonComVisibleBaseClassがあるため、インターフェイスを作成してComVisible(true)に設定し、FormAttribute [ClassInterface(ClassInterfaceType.None)]を設定しました。インターフェイスのメソッドはJavaScriptで呼び出すことができます。そしてそれは完璧に機能します:
しかし今、私の問題。インターフェイスには複数の機能が含まれています。個別のタスクグループ化のためにインターフェイスを分離したい。そのため、ロギング関数を含むインターフェースと、DataAccess関数などのインターフェースが必要です。
したがって、次のようになります。
しかし、これを行うと、2番目のインターフェイス(ILogging)の機能にJavascriptからアクセスできなくなります。インターフェイスの順序を切り替えると、IDataAccess関数にアクセスできなくなります。
したがって、Javascriptでは最初のインターフェイスのメソッドにのみアクセスできる場合があります。
各インターフェイスのすべての機能にアクセスできるようにするにはどうすればよいですか?繰り返しになりますが、BaseClassをComVisibleにし、ClassInterface属性を削除することは機能しますが、オプションではありません。
前もって感謝します!!
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 を登録せずにビルドすることは可能ですか?
c# - CA1017 VS2010 StyleCop での ComVisible 関連のエラー
ComVisible false にする必要があるという StyleCop の CA1017 エラー メッセージが表示されます。
次に、[assembly: ComVisible(false)]
最上位の名前空間の前にコードを配置します。ただし、他のエラー メッセージと共に同じエラーが表示されます。
VS2010もこの名前を認識していないようです。
これの何が問題なのですか?
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 を返します。アセンブリが構成ファイルを認識していないようです。
実行可能にするにはどうすればよいですか?
.net - VB6アプリ用のCom-VisibleDLLのデバッグ
VB6で作成されたアプリを更新しています。VS2010で新しいコードを記述し、DLLに保存したいと思います。しかし、DLLコードをデバッグする方法がわかりません。VS2010のテストアプリからDLLコードにステップインすることはできますが、VB6の実際のアプリからはステップインできません。何かご意見は?
.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でも空でもありません。
これに対処するための正しいアプローチは何ですか?
ありがとう。
wpf - WPFWebBrowserを使用してObjectForScriptingに辞書を渡す
WPFのコンポーネントを使用してWebBrowser
JavaScript+HTMLをホストしており、カスタマイズ可能なオブジェクトをプロパティとして渡せるようにしたいと考えていObjectForScripting
ます。私の最終目標は、で実行されているjavascriptが次のWebBrowser
ようなものを呼び出すことができるようにすることです。
プロパティを持つにComVisible
設定されたクラスを実装することで、これに近い何かを達成できます。true
lookup
ただし、渡すメンバーについては柔軟に対応したいObjectForScripting
ので、各プロパティを事前に指定することはできません。
理想的には、渡す名前とオブジェクトのペアを指定したいのですが、これは機能しません。
私がこれまでに試した(そして失敗した)こと:
Dictionary<string,object>
私のコンテキストとしてを使用する- その拡張子を使用すると、
Dictionary<string,object>
としてマークされますComVisible
- を使用して
ExpandoObject
- を使って
List<KeyValuePair<string,object>>
- その拡張子を使用すると、
List<KeyValuePair<string,object>>
としてマークされますComVisible
不足しているカスタマイズ可能なものObjectForScripting
をWPFに渡す方法はありますか?WebBrowser
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がインストールされています。
何か案は?