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

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

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

Re[7]: CのDllの外部変数をC#で参照するには?


(過去ログ 14 を表示中)

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

■4769 / inTopicNo.1)  CのDllの外部変数をC#で参照するには?
  
□投稿者/ 花子 (1回)-(2007/06/25(Mon) 15:05:39)

分類:[C# (Windows)] 

VC++6.0で作成したC言語のDLLでエクスポートされている外部変数を
C#から参照することはできますか?
以下のdata_aaaを参照したいです。

DllImportAttributeを使用して、以下のfunc_aaaを呼び出すような感じで、
何らかの宣言をしてdata_aaaを参照できたらBestなのですが。。。

よろしくお願い致します。

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllexport) void __stdcall func_aaa(double, char*);
__declspec(dllexport) int data_aaa;

#ifdef __cplusplus
}
#endif

引用返信 編集キー/
■4770 / inTopicNo.2)  Re[1]: CのDllの外部変数をC#で参照するには?
□投稿者/ επιστημη (545回)-(2007/06/25(Mon) 15:37:49)
επιστημη さんの Web サイト
No4769 (花子 さん) に返信
> VC++6.0で作成したC言語のDLLでエクスポートされている外部変数を
> C#から参照することはできますか?
> 以下のdata_aaaを参照したいです。
>
> DllImportAttributeを使用して、以下のfunc_aaaを呼び出すような感じで、
> 何らかの宣言をしてdata_aaaを参照できたらBestなのですが。。。
>
> よろしくお願い致します。
>
> #ifdef __cplusplus
> extern "C" {
> #endif
>
> __declspec(dllexport) void __stdcall func_aaa(double, char*);
> __declspec(dllexport) int data_aaa;
>
> #ifdef __cplusplus
> }
> #endif
>
引用返信 編集キー/
■4771 / inTopicNo.3)  Re[2]: CのDllの外部変数をC#で参照するには?
□投稿者/ επιστημη (546回)-(2007/06/25(Mon) 15:40:07)
επιστημη さんの Web サイト
ごめんなさい、変なのPOSTしちゃいました。
仕切り直し:

> ■No4769 (花子 さん) に返信
>>VC++6.0で作成したC言語のDLLでエクスポートされている外部変数を
>>C#から参照することはできますか?

解決策になってなくてごめんなさい。

とっととVC++8に乗り換えてC++/CLIで.NET化する方が
なんぼか安全で簡単だと思うのですケド。

引用返信 編集キー/
■4773 / inTopicNo.4)  Re[3]: CのDllの外部変数をC#で参照するには?
□投稿者/ 花子 (2回)-(2007/06/25(Mon) 16:19:04)
No4771 (επιστημη さん) に返信
> とっととVC++8に乗り換えてC++/CLIで.NET化する方が
> なんぼか安全で簡単だと思うのですケド。

私もそう思うのですが諸事情により、
C言語のDLLはVC++6.0でコンパイルしている状況です。
また、C++/CLIでラッパを作成するのは却下されてしまいました。

今までは、このCのDLLをVC++6.0のコンソールアプリで使用していただけだったのですが、
C#アプリにも提供することになりました。

「このままでC#で使用できるか?」
「このままでは使用できないのであれば、どう変更したら良いか?
 (VC++6.0によるC言語というのはそのままで)」

C#に詳しくないため、まずは、「このままでC#で使用できるか?」を
お聞きしたかったです。

引用返信 編集キー/
■4775 / inTopicNo.5)  Re[4]: CのDllの外部変数をC#で参照するには?
□投稿者/ NyaRuRu (3回)-(2007/06/25(Mon) 16:30:20)
No4773 (花子 さん) に返信
> C#に詳しくないため、まずは、「このままでC#で使用できるか?」を
> お聞きしたかったです。

まずは,という意味であれば,その外部変数のアドレスを C# 側から知ることができれば,読み書きは可能です.
読み書き自体は,適切な権限さえあればさして難しいことではありません.

では外部変数のアドレスをどうやって知るかですが,そのあたりの説明は必要ですか?
(たとえば変数のアドレスを返すエクスポート関数を作ってもいいですしね)
引用返信 編集キー/
■4776 / inTopicNo.6)  Re[5]: CのDllの外部変数をC#で参照するには?
□投稿者/ 花子 (4回)-(2007/06/25(Mon) 16:41:26)
No4775 (NyaRuRu さん) に返信

> まずは,という意味であれば,その外部変数のアドレスを C# 側から知ることができれば,読み書きは可能です.
> 読み書き自体は,適切な権限さえあればさして難しいことではありません.
>
> では外部変数のアドレスをどうやって知るかですが,そのあたりの説明は必要ですか?
> (たとえば変数のアドレスを返すエクスポート関数を作ってもいいですしね)

関数の呼び出しのようにCのDLL側の変更はなしで、
DllImportAttributeみたいにC#側で対応できればと思ったのですが、
やっぱ、アドレス(または値)を渡す関数をC側で提供するしかないですか?

引用返信 編集キー/
■4777 / inTopicNo.7)  Re[6]: CのDllの外部変数をC#で参照するには?
□投稿者/ NyaRuRu (4回)-(2007/06/25(Mon) 16:46:20)
No4776 (花子 さん) に返信
>>では外部変数のアドレスをどうやって知るかですが,そのあたりの説明は必要ですか?
>>(たとえば変数のアドレスを返すエクスポート関数を作ってもいいですしね)
>
> 関数の呼び出しのようにCのDLL側の変更はなしで、
> DllImportAttributeみたいにC#側で対応できればと思ったのですが、
> やっぱ、アドレス(または値)を渡す関数をC側で提供するしかないですか?

いえ,修正したくなければ C 側の修正は不要です.
もともと GetProcAddress でエクスポート変数のアドレスはとれますので.

引用返信 編集キー/
■4780 / inTopicNo.8)  Re[7]: CのDllの外部変数をC#で参照するには?
□投稿者/ 花子 (5回)-(2007/06/25(Mon) 17:31:15)
No4777 (NyaRuRu さん) に返信

> いえ,修正したくなければ C 側の修正は不要です.
> もともと GetProcAddress でエクスポート変数のアドレスはとれますので.

そっか!
C#でLoadLibraryやGetProcAddressをDllImportして使用すれば、
変数アドレスを取得できますね。
とりあえずCのDLLはそのままで、C#側で頑張ってもらうことにします。

επιστημηさん、NyaRuRuさん、対応ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -