他のファイルにある関数の呼び出し方について

[戻る]
C#初心者 2008/04/04(金) 10:22:30
visual studio 2005のC#で

たとえば

フォームのtest1.csの中でtest2.h test2.cpp内に記述した関数
test()を使用したいのですがどのように呼び出したらよいでしょうか?

C#はヘッダーファイルをインクルードしないと聞いているので方法
がわかりません。

すみませんが宜しくお願いします。

nicht sein 2008/04/04(金) 10:40:09
そもそも論として、C#とC++はぜんぜん違う言語だから、単純に呼び出すことは不可能。

それでもやりたい場合は、基本的にはC++側の関数をDLLにして、exportして、C#側では
[DllImport]を利用する。

DllImportの仕方については下記を参照。
http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html

C++の関数をDLLにexportするやり方がわからないのなら"DLLの作り方"などで適当にぐ
ぐってください。

YuO [E-Mail] 2008/04/04(金) 10:45:14
簡易な解決方法を2通りほど。
どちらにしても,test関数はDLLに置く必要があります。

a.) test関数 (またはそのラッパ関数) をC++/CLIのクラスのstatic関数にして,その
C++/CLIのプロジェクト or DLLをC#プロジェクトから参照設定する
b.) test関数 (またはそのラッパ関数) を通常のDLLのエクスポート関数として公開
し,C#からはP/Invokeを使って呼び出す

あとはCOM化したり.netmoduleとしたり……。

C#初心者 2008/04/04(金) 10:49:47
返信ありがとうございます。

少し誤解がありました・・・。

今回は画面がC#で内部処理はVC++で書きたいと思っています。

本当に初心者で申し訳ないのですがC#の画面のコントロールボ
タンを押下した後の処理をVC++のCPPに記述したいのですがそ
の辺のことを記述してるページがあれば教えてほしいです。

επιστημη [HomePage] 2008/04/04(金) 11:44:37
C++/CLI使っていいなら:
http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_01.html
↑こいつのpage4あたりから。

C#初心者 2008/04/04(金) 13:45:35
επιστημηさん

親切な回答ありがとうございます。

サイトをみましたが

Documentインターフェイスの作成は必ず必要なのでしょうか?

今回の構成は・・・

C#(View),C++(Document)で考えています。

επιστημη [HomePage] 2008/04/04(金) 14:02:36
C#からC++を直接呼ぶにはCOMインタフェースを実装することになるでしょう。
それが面倒なのでC++/CLIでラップしています。

C++/CLIがお嫌いでしたら、C++でCOMを実装してください。

PATIO 2008/04/04(金) 16:23:47
View-DocumentのアーキテクチャってC#でもあったんでしたっけ?

επιστημηさんの記事はC++/CLIでアプリを作成する記事なので
C#初心者さんの話にそのまま適応できるわけでは無いと思いますよ。
中身を理解して利用せよと言う話だと思います。

C#初心者さんが、C#は初心者だけとC++はやってましたとか、
VC++でバリバリアプリ作ってましたと言うならともかく、
C++もやった事が無いのであれば、前途多難と言う気がします。
(ここまでの書き込み内容から想像するとですけれど)

C#の文法もさることながらC++の文法も覚えないといけないとかなら
まだ今質問されている内容の回答をもらっても理解できないと思います。

C#とC++はごっちゃには使えませんから
C#はC#で、C++はC++でそれぞれ作成しないと駄目です。
C++で内部処理しかも表示に関わりが無い部分のみをライブラリとして
作成してそれをC#のアプリケーションから使う形かなと思います。
というか、C++側の処理ってC++じゃないといけないんでしょうか?
Cの関数としてDLLからエクスポートしておいてC#からはP/Invokeを使って呼び出す
方が良いのではと言う気もしたり。
話の内容からするとCOMで作成すると言う部分も多分お分かりで無いような気がします。

C#初心者 2008/04/07(月) 17:52:56
[[解決]]
επιστημηさん、PATIOさん

返信が遅くなりすみません。

参照設定にDocumentを追加しC#のコード記述欄(.CS)のコンストラクタの手前で

private testDocument thisDocumentとして

thisDocument = new testDocumentで実体を渡してあげたら上手くいきました。

thisDocument.CPPファイルに書いた関数等でアクセスできました。

古いスレッドには追加発言できません。