マネージドコードとアンマネージドコードのブリッジ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[VC++]]、[[Visual Basic]]
--[[.NET開発]] > [[.NET言語]]
--[[.NETのクロスプラットフォーム対応]]
* 目次 [#l92341c6]
#contents
*概要 [#i8022e3e]
-先ずは「[[マーシャリング]]」を参照して下さい。
-[[.NET Standard]]、[[.NET Core]]でのサポート状況について
--P/Invoke(DllImport)はサポートされている模様。
--しかし、COMは、現時点では、[[互換機能パック>Windows Des...
*方法 [#wf43896d]
**アンマネージドコードのインターフェイスをマネージドコー...
以下の2つの方法があります。
***DLLのインターフェイスをマネージドコード(.NET)から使...
※ [[サンプルコード>#e290321a]]、[[参考>#x720ec35]]を参照。
***COMのインターフェイスをマネージドコード(.NET)から使...
※ [[サンプルコード>#e290321a]]、[[参考>#x720ec35]]を参照。
**マネージドコード(.NET)のインターフェイスをアンマネー...
以下の2つの方法があります。
***.NETのアンマネージド拡張(C++/CLI)でDLLインターフェイ...
※ [[サンプルコード>#e290321a]]、[[参考>#x720ec35]]を参照。
***.NETアセンブリでCOMインターフェイスを[[COMユーザ>DLL/C...
※ [[参考>#x720ec35]]を参照。
**サンプルコード [#e290321a]
コチラが参考になります。
-[[DLL作成手順]]
-[[OpenTouryoProject>https://github.com/OpenTouryoProject...
***.NET(manage)→ VC、VB6(unmanage)の相互運用 [#kf1bf2...
.NET(manage)→ VC、VB6(unmanage)の相互運用のテストです。
-Other-InteropWithUnmanage at master~
https://github.com/OpenTouryoProject/SampleProgram/tree/m...
***アンマネージコードからマネージコードを呼び出す [#s4073...
[[上記>#kf1bf207]]の逆(VC、VB6(unmanage)→ .NET(manage...
-Other-DotNETBridge at master~
https://github.com/OpenTouryoProject/SampleProgram/tree/m...
>Win32 DLL と C++/CLIのブリッジDLLを使用して、アンマネー...
*コールバック [#e13c7358]
**.NET側のコールバック関数をC/C++から呼び出したい [#t9ae5...
-P/Invoke(相互運用マーシャラー)に標準実装されている模様。
-恐らく、自動的にマーシャリングされるのだと思います。
--行きはマーシャリング(デリゲードからポインタ)
--帰りもマーシャリング(多分Cにラッパのポインタが渡る)
※ [[参考>#x720ec35]]を参照。
**C/C++側のコールバック関数を.NETから呼び出したい [#vae2a...
-[[.NET側のコールバック関数をC/C++から呼び出したい>#t9ae5...
-マーシャリングの動作のイメージができていないと、~
正しい処理を実装できない可能性があります。~
e.g.: 以前、callback実装を正しく実装できないことがあった。
***質問 [#u83bfdb8]
-C++のEXEからC#のメソッドを呼び出します。
-このときの引数でC++側のコールバック関数のアドレスを渡し...
-このあと、外的要因でC#のDLLから上記のコールバックを呼び...
コールバック呼び出しで例外エラーとなります。
***回答 [#f52beaa8]
-C++からC#は直接呼べないのでアンマネージド拡張(C++/CLI)...
-また、.NETにCの関数ポインタを直接渡しても.NETからの呼び...
そこで思いついたのは、
+C++/CLI内部でコールバックするメソッドを持ったオブジェク...
C#のメソッド経由でそのオブジェクトを渡す。~
C#からこのオブジェクトのメソッドを経由してC++にコールバッ...
+C++/CLIでC#から呼ぶためのDLLエクスポート関数を作る。~
このエクスポート関数にCの関数ポインタを渡してコールバック...
という2つの方法です。
***結果 [#abacdc98]
[[上記>#f52beaa8]]の1.で解決しました。
*クロスプラットフォーム化 [#u62d113a]
**[[アンマネージドコードのクロスプラットフォーム化]] [#h9...
**[[マネージドコード・インターフェイスをLinuxアンマネージ...
-現時点では、できない模様。.NetCore C++/CLIがLinuxでサポ...
https://developercommunity.visualstudio.com/t/NetCore-CCL...
-JCOBridge と言う謎のソフトウェアもあるようです。https://...
*参考 [#x720ec35]
-CLR Inside Out Marshaling between Managed and Unmanaged ...
http://msdn.microsoft.com/ja-jp/magazine/cc164193.aspx
--[InAttribute] と [OutAttribute]
--キーワード out および ref と、参照による受け渡し
--戻り値
--StringBuilder と[[マーシャリング]]
--コピーと固定
--メモリの所有権
--逆 P/Invoke とデリゲートの有効期間
--P/Invoke Interop Assistant
**microsoft.com [#mf36211a]
***Microsoft Docs [#g2565c95]
-ネイティブ相互運用性 - .NET~
https://docs.microsoft.com/ja-jp/dotnet/standard/native-i...
-プラットフォーム呼び出し (P/Invoke)~
https://docs.microsoft.com/ja-jp/dotnet/standard/native-i...
***MSDN(旧) [#se7ab958]
-アンマネージ コードとの相互運用~
http://msdn.microsoft.com/ja-jp/library/sd10k43k.aspx
--アンマネージ コードとの相互運用性に関する方法
--.NET Framework への COM コンポーネントの公開
--COM への .NET Framework コンポーネントの公開
--アンマネージ DLL 関数の処理
--相互運用のためのデザインの考慮事項
--相互運用マーシャリング
--方法: HRESULT に例外を割り当てる
--ジェネリック型を使用する相互運用
-.NET からの COM コンポーネントの呼び出し~
http://msdn.microsoft.com/ja-jp/library/dd297671.aspx
**その他 [#acfd7f90]
***@IT [#f86d5b8c]
-C# VB.NET VS.NET
--.NET TIPS Win32 APIやDLL関数を呼び出すには?~
http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w3...
--.NET TIPS Win32 APIやDLL関数に文字列や文字列バッファを...
http://www.atmarkit.co.jp/fdotnet/dotnettips/025w32string...
--.NET TIPS Win32 APIやDLL関数に構造体を渡すには?~
http://www.atmarkit.co.jp/fdotnet/dotnettips/026w32struct...
--.NET TIPS Win32 API呼び出しを手軽に記述するには?~
http://www.atmarkit.co.jp/fdotnet/dotnettips/166pinvoke/p...
-Insider.NET
--[C#] 引数にcallbackを持つDLLメソッドの使用について~
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1...
***P/Invoke [#t9cf3ae5]
-P-Invoke - Wikipedia~
http://ja.wikipedia.org/wiki/P/Invoke
-pinvoke.net the interop wiki!~
http://www.pinvoke.net/
***ツール類 [#p37ed057]
-.NET用のAPIビューア .NET Tips C#, VB.NET~
http://dobon.net/vb/dotnet/links/apiviewer.html
--Win32APIViewer .NET~
リンク切れ?
--PINVOKE.NET Add-In for Visual Studio 2003 and 2005~
http://www.red-gate.com/products/dotnet-development/pinvo...
----
Tags: [[:Windows]], [[:プログラミング]], [[:.NET開発]]
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[VC++]]、[[Visual Basic]]
--[[.NET開発]] > [[.NET言語]]
--[[.NETのクロスプラットフォーム対応]]
* 目次 [#l92341c6]
#contents
*概要 [#i8022e3e]
-先ずは「[[マーシャリング]]」を参照して下さい。
-[[.NET Standard]]、[[.NET Core]]でのサポート状況について
--P/Invoke(DllImport)はサポートされている模様。
--しかし、COMは、現時点では、[[互換機能パック>Windows Des...
*方法 [#wf43896d]
**アンマネージドコードのインターフェイスをマネージドコー...
以下の2つの方法があります。
***DLLのインターフェイスをマネージドコード(.NET)から使...
※ [[サンプルコード>#e290321a]]、[[参考>#x720ec35]]を参照。
***COMのインターフェイスをマネージドコード(.NET)から使...
※ [[サンプルコード>#e290321a]]、[[参考>#x720ec35]]を参照。
**マネージドコード(.NET)のインターフェイスをアンマネー...
以下の2つの方法があります。
***.NETのアンマネージド拡張(C++/CLI)でDLLインターフェイ...
※ [[サンプルコード>#e290321a]]、[[参考>#x720ec35]]を参照。
***.NETアセンブリでCOMインターフェイスを[[COMユーザ>DLL/C...
※ [[参考>#x720ec35]]を参照。
**サンプルコード [#e290321a]
コチラが参考になります。
-[[DLL作成手順]]
-[[OpenTouryoProject>https://github.com/OpenTouryoProject...
***.NET(manage)→ VC、VB6(unmanage)の相互運用 [#kf1bf2...
.NET(manage)→ VC、VB6(unmanage)の相互運用のテストです。
-Other-InteropWithUnmanage at master~
https://github.com/OpenTouryoProject/SampleProgram/tree/m...
***アンマネージコードからマネージコードを呼び出す [#s4073...
[[上記>#kf1bf207]]の逆(VC、VB6(unmanage)→ .NET(manage...
-Other-DotNETBridge at master~
https://github.com/OpenTouryoProject/SampleProgram/tree/m...
>Win32 DLL と C++/CLIのブリッジDLLを使用して、アンマネー...
*コールバック [#e13c7358]
**.NET側のコールバック関数をC/C++から呼び出したい [#t9ae5...
-P/Invoke(相互運用マーシャラー)に標準実装されている模様。
-恐らく、自動的にマーシャリングされるのだと思います。
--行きはマーシャリング(デリゲードからポインタ)
--帰りもマーシャリング(多分Cにラッパのポインタが渡る)
※ [[参考>#x720ec35]]を参照。
**C/C++側のコールバック関数を.NETから呼び出したい [#vae2a...
-[[.NET側のコールバック関数をC/C++から呼び出したい>#t9ae5...
-マーシャリングの動作のイメージができていないと、~
正しい処理を実装できない可能性があります。~
e.g.: 以前、callback実装を正しく実装できないことがあった。
***質問 [#u83bfdb8]
-C++のEXEからC#のメソッドを呼び出します。
-このときの引数でC++側のコールバック関数のアドレスを渡し...
-このあと、外的要因でC#のDLLから上記のコールバックを呼び...
コールバック呼び出しで例外エラーとなります。
***回答 [#f52beaa8]
-C++からC#は直接呼べないのでアンマネージド拡張(C++/CLI)...
-また、.NETにCの関数ポインタを直接渡しても.NETからの呼び...
そこで思いついたのは、
+C++/CLI内部でコールバックするメソッドを持ったオブジェク...
C#のメソッド経由でそのオブジェクトを渡す。~
C#からこのオブジェクトのメソッドを経由してC++にコールバッ...
+C++/CLIでC#から呼ぶためのDLLエクスポート関数を作る。~
このエクスポート関数にCの関数ポインタを渡してコールバック...
という2つの方法です。
***結果 [#abacdc98]
[[上記>#f52beaa8]]の1.で解決しました。
*クロスプラットフォーム化 [#u62d113a]
**[[アンマネージドコードのクロスプラットフォーム化]] [#h9...
**[[マネージドコード・インターフェイスをLinuxアンマネージ...
-現時点では、できない模様。.NetCore C++/CLIがLinuxでサポ...
https://developercommunity.visualstudio.com/t/NetCore-CCL...
-JCOBridge と言う謎のソフトウェアもあるようです。https://...
*参考 [#x720ec35]
-CLR Inside Out Marshaling between Managed and Unmanaged ...
http://msdn.microsoft.com/ja-jp/magazine/cc164193.aspx
--[InAttribute] と [OutAttribute]
--キーワード out および ref と、参照による受け渡し
--戻り値
--StringBuilder と[[マーシャリング]]
--コピーと固定
--メモリの所有権
--逆 P/Invoke とデリゲートの有効期間
--P/Invoke Interop Assistant
**microsoft.com [#mf36211a]
***Microsoft Docs [#g2565c95]
-ネイティブ相互運用性 - .NET~
https://docs.microsoft.com/ja-jp/dotnet/standard/native-i...
-プラットフォーム呼び出し (P/Invoke)~
https://docs.microsoft.com/ja-jp/dotnet/standard/native-i...
***MSDN(旧) [#se7ab958]
-アンマネージ コードとの相互運用~
http://msdn.microsoft.com/ja-jp/library/sd10k43k.aspx
--アンマネージ コードとの相互運用性に関する方法
--.NET Framework への COM コンポーネントの公開
--COM への .NET Framework コンポーネントの公開
--アンマネージ DLL 関数の処理
--相互運用のためのデザインの考慮事項
--相互運用マーシャリング
--方法: HRESULT に例外を割り当てる
--ジェネリック型を使用する相互運用
-.NET からの COM コンポーネントの呼び出し~
http://msdn.microsoft.com/ja-jp/library/dd297671.aspx
**その他 [#acfd7f90]
***@IT [#f86d5b8c]
-C# VB.NET VS.NET
--.NET TIPS Win32 APIやDLL関数を呼び出すには?~
http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w3...
--.NET TIPS Win32 APIやDLL関数に文字列や文字列バッファを...
http://www.atmarkit.co.jp/fdotnet/dotnettips/025w32string...
--.NET TIPS Win32 APIやDLL関数に構造体を渡すには?~
http://www.atmarkit.co.jp/fdotnet/dotnettips/026w32struct...
--.NET TIPS Win32 API呼び出しを手軽に記述するには?~
http://www.atmarkit.co.jp/fdotnet/dotnettips/166pinvoke/p...
-Insider.NET
--[C#] 引数にcallbackを持つDLLメソッドの使用について~
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1...
***P/Invoke [#t9cf3ae5]
-P-Invoke - Wikipedia~
http://ja.wikipedia.org/wiki/P/Invoke
-pinvoke.net the interop wiki!~
http://www.pinvoke.net/
***ツール類 [#p37ed057]
-.NET用のAPIビューア .NET Tips C#, VB.NET~
http://dobon.net/vb/dotnet/links/apiviewer.html
--Win32APIViewer .NET~
リンク切れ?
--PINVOKE.NET Add-In for Visual Studio 2003 and 2005~
http://www.red-gate.com/products/dotnet-development/pinvo...
----
Tags: [[:Windows]], [[:プログラミング]], [[:.NET開発]]
ページ名: