c#で作成したDLLのイベントをDelhpiで受けたい


YUTA  2019-09-10 06:03:19  No: 49879

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で受け取るにはどのように定義すればいいのでしょうか?


通りすがり  2019-09-10 19:52:27  No: 49880

このあたりが参考になりませんか?

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

正直かなり面倒な気はしますね…


Nov  2019-09-18 08:53:29  No: 49881

TLBの読込でコンポーネントラッパー作成を有効にすると楽です。
コンポーネントを作成する手間は少しありますけど。
ただ、Delphi2005は未対応かもしれません。
(XE2は対応してました)


Mr.XRAY  2019-09-20 08:12:06  No: 49882

本人が放置のスレッドのようですが.

>このイベントをDelphiで受け取るにはどのように定義すればいいのでしょうか? 

Event_DataSend(100); の実際の内容が不明なのですが,
質問の内容は「送る」方法のような気がします.
送るのであれば SendMessage でいいような気がします.
C# には Windows API を使用する仕組みがあります.
検索するとしたら 「C# sendmessage」でしょうか.

Delphi 側でそのメッセージを受け取るようにします.
実際にテストはしていませんので可能性は確実ではありません.
質問の意味も勘違いしているかも知れません.


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加