VC++で作成したCOMをDelphiで使用しようと思い、Delphiを少しばかり勉強したのですがC言語でいうvoid* pが、var p: Pointer;となってしまい実質ポインタのアドレスを渡しているような結果の引数になってしまいます。
IDLでは以下のように定義しています。↓
HRESULT Func( [in] void* p );
するとDelphi側ではポインタの変数パラメータになります。↓
function Get(var p: Pointer): HResult; stdcall;
当然Delphiでこのメソッドを使用すると例外エラーになってしまいます。
C/C++、VBではうまくいきます。
void*は使うなということなんでしょうか?(汗
もう一つ質問があるのですが、タイプライブラリ内に定義した普通の関数がVBでは認識してくれるのですが、Delphiではダメでした。
そもそもタイプライブラリに関数を定義してもDelphiでは対応してないのでしょうか?
IDLでは、
[dllname("xxxxxx.dll")]
module xxxxxxAPI
{
[entry("Hoge")]
void __stdcall hoge(void);
};
としています。
初歩的な質問ではありますがよろしくお願いします。
/* 開発環境 */
Win2k SP4
VC++6.0 SP6 非ATL
Delphi Personal 6
SELNAさん はじめまして
DelphiでのCOMの使い方はこちらのHPが参考になるかも知れません。
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/activex/index.htm
John7さん参考になるHPの紹介ありがとうございます。
ツイート | ![]() |