C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C++で作成された引数void*の関数をC#から呼び出す

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■94445 / inTopicNo.1)  C++で作成された引数void*の関数をC#から呼び出す
  
□投稿者/ あきら (1回)-(2020/04/13(Mon) 14:24:16)

分類:[.NET 全般] 

C++で作成されたdllに引数がvoid*の関数があります。
この関数をC#で作成したアプリケーションから呼び出すにはどのようにすればいいでしょうか?

引用返信 編集キー/
■94447 / inTopicNo.2)  Re[1]: C++で作成された引数void*の関数をC#から呼び出す
□投稿者/ Hongliang (992回)-(2020/04/13(Mon) 14:35:39)
そのまま表すのはIntPtr型ですが、配列だとか、構造体のref渡しだとかでも定義できます。
要は関数次第です。
引用返信 編集キー/
■94448 / inTopicNo.3)  Re[1]: C++で作成された引数void*の関数をC#から呼び出す
□投稿者/ 774RR (783回)-(2020/04/13(Mon) 14:46:18)
まあごく普通の「呼ぶ側がバッファを用意して渡す」仕様であるとして
C / C++ の void* は総称型と考えてよい=何型を渡してもよい わけだけど
実用上 C# から呼ぶときは特定の型しか渡さないはずなので、その型で DllImport しませう。
C# で class MyClass (参照型) のインスタンスを渡したいのなら

C++
extern "C" __declspec(dllimport) int __stdcall mydllfunc(void*);

C#
using System.Runtime.InteropServices;
class MyClass { ... }
[DllImport("mydll.dll", CallingConvention = CallingConvention.StdCall)]
static extern int mydllfunc(MyClass c);

値型 struct MyStruct のインスタンスを渡したいなら ref MyStruct や out MyStruct

__cdecl だったりするなら適切に直してください
引用返信 編集キー/
■94452 / inTopicNo.4)  Re[2]: C++で作成された引数void*の関数をC#から呼び出す
□投稿者/ あきら (4回)-(2020/04/13(Mon) 16:08:12)
No94447 (Hongliang さん) に返信
No94448 (774RR さん) に返信

ありがとうございます。
呼び出し方、理解できました。

引用返信 編集キー/
■94453 / inTopicNo.5)  Re[3]: C++で作成された引数void*の関数をC#から呼び出す
□投稿者/ あきら (5回)-(2020/04/13(Mon) 16:08:26)
No94452 (あきら さん) に返信
> ■No94447 (Hongliang さん) に返信
> ■No94448 (774RR さん) に返信
>
> ありがとうございます。
> 呼び出し方、理解できました。
>
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ