dllで次のインターフェイスを定義しています。
class TestInterface
{
public: int foo(int)=0;
};
そして、次の関数でこのタイプのオブジェクトを作成しましょう。
extern "C" declspec(dllexport) TestInterface* __stdcall CreateInterface();
インターフェイスはdllに実装されており、C ++で問題なく使用できます(.def
すべてが正しく機能することを確認するためにファイルも定義しました)。ただし、パスカルでの使用に関しては問題があります。
これが私Interface
がパスカルで使用しようとしている方法です:
type
myinterface = interface(IInterface)
function foo(param1: Integer): Integer;
end;
TMyInterface = ^myinterface;
pCreateInterface = function: TMyInterface; stdcall;
var
CreateInterface: pCreateInterface;
パスカルでのインターフェースの使用:
function init()
begin
DllHandle := LoadLibrary(DLLPath);
if DllHandle <> 0 then
begin
@CreateInterface := GetProcAddress(DllHandle, 'CreateInterface');
if (@GetXYZ <> nil) then
begin
dllInitialized := true;
myXYZ := CreateInterface();
myXYZ.foo(1); // Access violation error here
end;
end;
end;
すべてが良いようです。デバッグ時には、CreateInterface
正常に実行され、に値がありますmyXYZ
。しかし、電話をかけようとするとfoo
、アクセス違反エラーが発生します。
dllからクラス内にない関数を呼び出すことができるが、クラス/インターフェイス内にある関数は呼び出せないことに気づきました。
私は何か間違ったことをしていますか?これどうやってするの?
C++ソースを変更せずにdelphiでC++dllを使用する方法はありますか?