- PR -

C#のクラスライブラリDLLをC++(VC6.0)で利用する方法

1
投稿者投稿内容
なな
会議室デビュー日: 2005/10/12
投稿数: 13
投稿日時: 2005-10-12 11:14
様々なところで同じような質問がなされていて、
それを参考に自分なりに挑戦してみたのですが、
希望する動作が得られず試行錯誤しても原因がわかりませんでした。

私はC#で作成したDLLをTLBファイルに変換してそれをC++で用いる方法を選択しました。
(C#プログラミングがメインだが、C++のプログラムの機能が必要になったため)

サンプルとして作成してみたのですが、
C#:インターフェイスMessageでvoid Out()を作り、ClasssクラスではOut()によって文字列を書き込んだファイルを作成するDLLを作成し単体動作を確認。

public class Classs : Message
{
public void Out()
{
StreamWriter wr = new StreamWriter("C:\\HelloDebug.txt");
wr.WriteLine("Hello!");
wr.Close();
}
}


C++:MFCをサポートするコンソールアプリを作成。
C#で作成したDLLを用いて、RegAsm.exe(TlbExp.exe)によってTLBファイルを作成。
クラスの追加を行い、TypeLibからのMFCクラスを選択して、作成したTLBファイルを選択。
クラスの追加によって作成されたヘッダーファイルをコンソールアプリのメインにインクルードして、
C#で作成した関数Out()を呼び出す。(インテリセンスでOut関数の表示を確認。)

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
}
else
{
CMessage mes;
mes.Out();
printf("Message Output Complete");
getchar();
}
return nRetCode;
}

この状態でビルドを行った結果、エラーは出力されずに実行可能状態になりました。
実行してみると、エラーダイアログなどは出力されませんでしたが、
C#のDLLで処理されるはずのファイルも作成されていませんでした。

何か記述や手順が足りないのでしょうか?御教授お願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-10-12 12:24
引用:

希望する動作が得られず試行錯誤しても原因がわかりませんでした。



ステップ実行位して、もう少し問題箇所を絞り込んでみれば?
1

スキルアップ/キャリアアップ(JOB@IT)