他のファイルにある関数の呼び出し方について – プログラミング – Home

他のファイルにある関数の呼び出し方につ...
 
通知
すべてクリア

[解決済] 他のファイルにある関数の呼び出し方について


C#初心者
 C#初心者
(@C#初心者)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

visual studio 2005のC#で

たとえば

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

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

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


引用未解決
トピックタグ
nicht sein
 nicht sein
(@nicht sein)
ゲスト
結合: 17年前
投稿: 2
 

そもそも論として、C#とC++はぜんぜん違う言語だから、単純に呼び出すことは不可能。

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

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

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


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

簡易な解決方法を2通りほど。
どちらにしても,test関数はDLLに置く必要があります。

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

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


返信引用
C#初心者
 C#初心者
(@C#初心者)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

返信ありがとうございます。

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

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

C++/CLI使っていいなら:
http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_01.html
↑こいつのpage4あたりから。


返信引用
C#初心者
 C#初心者
(@C#初心者)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

επιστημηさん

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

サイトをみましたが

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

今回の構成は・・・

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

C#からC++を直接呼ぶにはCOMインタフェースを実装することになるでしょう。
それが面倒なのでC++/CLIでラップしています。

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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#初心者
 C#初心者
(@C#初心者)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

επιστημηさん、PATIOさん

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

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

private testDocument thisDocumentとして

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました