C++DLLから.netにコールバック – プログラミング – Home

C++DLLから.netにコールバック
 
通知
すべてクリア

C++DLLから.netにコールバック


アレカ
 アレカ
(@アレカ)
ゲスト
結合: 14年前
投稿: 1
Topic starter  

お世話になります。
xp3、VB.netとVC6.0でプログラムを組んでいます。

exe(VB.net#で作成)からdll(VC++で作成)に対してC/C++でいうところの関数ポインタ(C#の
メソッド)を登録して、dllから任意のタイミングでコールバックしたいです。

以下で実装されているみたいなことがしたいのです。

EnumWindows関数のコールバック関数を登録する。
http://msdn.microsoft.com/ja-jp/library/843s5s5x.aspx

VB.netからの呼び方はわかりますが、肝心のdll内でどのような処理にすればよいかわかり
ません。
exeがVB6ではAddressOfを使用して実装していました。
(dllの引数はlong*で、中で関数ポインタにキャストしてコールできていました。)

何か情報をお持ちの方いらっしゃいませんでしょうか?

#.netからC++を使うのは簡単だが逆は非常に複雑怪奇だということを小耳にはさんだこと
がありますが、本当なのでしょうか・・・


引用解決済
トピックタグ
Kelly
 Kelly
(@Kelly)
ゲスト
結合: 16年前
投稿: 13
 

呼び出し側が.NETであるかどうかに関わりなく、
以下に通りにすれば良いかと思います。

□ CPPファイル

typedef void (CALLBACK *CALLBACKPROC)(int);

static CALLBACKPROC callbackProc;

// コールバック関数の登録
extern C
void WINAPI RegisterCallback(CALLBACKPROC proc)
{
callbackProc = proc;
}

// コールバック関数の登録解除
extern C
void WINAPI UnregisterCallback()
{
callbackProc = NULL;
}

// 任意のタイミングで
void Func()
{
if (callbackProc != NULL)
callbackProc(100);
}

□ DEFファイル

EXPORTS
; 明示的なエクスポートはここへ記述できます
RegisterCallback
UnregisterCallback


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

VC6でさえなければC++/CLIで書けるんですけどねぇ...


返信引用
ゼロム
 ゼロム
(@ゼロム)
ゲスト
結合: 14年前
投稿: 1
 

いまだにVC6を使っているプログラマーがいることに驚きます。

自分は極貧プログラマーですが、コンパイラくらいは新しいものを買ってます。
プログラマーにとっては必需品ですからね。

ていうか、ソフトを作る側がこんなことでは、ユーザーに対して有償アップを
してくださいなんて言えないですよね。

ソフトは売れないし、どんどんフリー化していくし、
もう、ソフトハウスなんて成立しない時代なのかもしれませんね。
ソフトはGoogleみたいな会社が、余ったお金で作るもの・・・悲しいです。

マイクロソフトが無料のセキュリティソフトを出してしまったおかげで、
ノートンやカスペルスキーも消えるでしょうね。

本題とは関係ない話ですみません。m(_ _)m


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

> いまだにVC6を使っているプログラマーがいることに驚きます。

おしごとだとしゃぁないこともありますけどね。
お客さんに納めたやつが旧くって、そいつのメンテのためには捨てられんとか。

そうでもなきゃ旧いの使い続ける意味ねぇですが。


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

επιστημηさんが言われている通りで
仕事上の必然があれば仕方ないかもとも思います。
開発環境の移行でお客さんにもバージョンアップを
お願いするのが難しいというケースも多々聞くので
開発側だけの都合で開発環境を移行できないのも
また事実でしょう。
出来れば、計画的にアナウンスしつつ、
新機能の追加もするから移行も同時にしましょうとか、
ライブラリ等のバージョンアップの必要性を
お客さんに納得してもらって移行できると良いのですけれど。

お客さん相手の話だとこの辺つらいですよねぇ。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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