C#(VisualStudio 2015)で設計したDLLをDelphi2005で開発した古いプログラムで使用したく、設計を進めております。
大前提としてC# の DLL に COM インターフェイス用のコードを追加したり、GUID の作成したり等諸々の「使用できるようにする下準備」は済ませたつもりです。実際DLL内の関数をDelphiで呼び出すことまではできております。
private
{ Private 宣言 }
LDllClass : OleVariant;
LIntC : Integer;
LDllClass := CreateOleObject('TESTDLL.Calc');
LDllClass.
LIntC := LDllClass.Calc(123);//計算結果を返す
Button1.Caption := IntToStr(LIntC);
//*****ここまではOK*****
一方、DLL内で関数内の進捗をイベントで通知しようと考えており、
進捗の節目の都度、イベントを発生させたいと考えております。
C#側のイベント定義
public delegate void DataSend(int data);
public event DataSendHandler Event_DataSend;
if (Event_DataSend!= null)
{
Event_DataSend(100);
}
このイベントをDelphiで受け取るにはどのように定義すればいいのでしょうか?
このあたりが参考になりませんか?
Delphi CreateOleObject events - Stack Overflow
https://stackoverflow.com/questions/3643463/delphi-createoleobject-events
More Automation In Delphi Session by Brian Long
http://www.blong.com/Conferences/IConUK2000/DelphiMoreAutomation/More%20Automation%20In%20Delphi.htm
正直かなり面倒な気はしますね…
TLBの読込でコンポーネントラッパー作成を有効にすると楽です。
コンポーネントを作成する手間は少しありますけど。
ただ、Delphi2005は未対応かもしれません。
(XE2は対応してました)
本人が放置のスレッドのようですが.
>このイベントをDelphiで受け取るにはどのように定義すればいいのでしょうか?
Event_DataSend(100); の実際の内容が不明なのですが,
質問の内容は「送る」方法のような気がします.
送るのであれば SendMessage でいいような気がします.
C# には Windows API を使用する仕組みがあります.
検索するとしたら 「C# sendmessage」でしょうか.
Delphi 側でそのメッセージを受け取るようにします.
実際にテストはしていませんので可能性は確実ではありません.
質問の意味も勘違いしているかも知れません.