C#でつくったDLLを呼び出したい – プログラミング – Home

C#でつくったDLLを呼び出したい
 
通知
すべてクリア

C#でつくったDLLを呼び出したい


はち
 はち
(@はち)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

こんにちは。
本日、C#で作成したDLLをC++できちんと動作するように、指示があったのですが、C+
+は初めてでよくわかりません。
C#ができるからと考えていた私が甘かった・・・。
やりたいことは、C#で作成したクラスライブラリをC++で実行したい。
ということです。

呼び出し側の情報
クラス名:Execute
メソッド名:ConeectDb
引数:string conStr ->第一引数
  :string conPw ->第二引数
戻り値:正常:0 異常:-1

以上をC++側で実行したいだけなのですが・・・。
C++側はボタンを押下するフォームのみ作成はできたのですが、
LoadLibraryなどの使い方をみても良く判らなくて・・・
すみませんが、助けてください ><


引用解決済
トピックタグ
C#
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

C#で作成したDLLってことはアセンブリなのよね。
これをC++から呼ぶってことはManaged C++(C++/CLI)だわね。
とすると、普通のC++とはワケが違います。
# てゆっか、わざわざC++で呼ぶくらいなら、全部C#でやれば? って思う。

.NETの規約に従って呼び出すことになりますから、
それに応じた参考書を読むべし。

上に挙げられた質問だけに答えるのなら楽ですが、
あなたの求めるものはそんなんじゃありませんよね?


返信引用
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

マルチポストは駄目ですよ。

http://www.mtakahashi.com/cgi.cgi?13565


返信引用
はち
 はち
(@はち)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

すみません、ちょっと切羽つまっていたので、多重投稿になりました。
普通のC++じゃないんですね・・・。(といってもC++が初めてですが。)
ほんとう、C#でつくって、なぜわざわざC++で動くか確認するのかは、私も不明です。

もうしわけありません、もうしばらく考えて見ます・・・


返信引用
とおり
 とおり
(@とおり)
ゲスト
結合: 21年前
投稿: 43
 

マルチポストした全ての箇所に、↑の回答を書いて閉じて下さい。


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

--- Execute.cs ---
public class Execute {

public int ConnectDB(string conStr, string conPw) {
System.Console.WriteLine(conStr={0}, conPw={1}, conStr, conPw);
return conStr.Length == conPw.Length ? 0 : -1;
}

}

--- cppmain.cpp ---
#include <tchar.h>

#using <mscorlib.dll>
#include <iostream>

using namespace System;

int _tmain() {
Execute __gc* p = __gc new Execute();
int result = p->ConnectDB(SHello, SWorld);
std::cout << result = << result << std::endl;
return 0;
}

--- コマンドライン ---
csc /t:library execute.cs
cl /clr:oldSyntax /FU Execute.dll cppmain.cpp

…とりあえず、これで呼べてます。


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

自己ふぉろー。
近頃の書き方だとこぉなります。

#using <mscorlib.dll>
#include <iostream>

using namespace System;

int main() {
Execute^ p = gcnew Execute();
int result = p->ConnectDB(日本, ちゃちゃちゃ);
std::cout << result = << result << std::endl;
return 0;
}

コマンドラインは:
cl /clr /FU Execute.dll cppmain.cpp


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

COM化しても出来るそうです。

タイムリー(なのか)に他の掲示板で同じ話題が出ていたのでリンクを張っておきます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24189&forum=7&1
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24181&forum=7&1
(おそらく折曲がるのでアドレスバーにコピペしてください)


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

「逆P/Invoke」っつー手法を使って、マネージドアセンブリからアンマネージメソッド
をエクスポートすることもできます。
激しく面倒くさいですが。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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