hmmm, heb het min of meer zelf al opgelost. Alhoewel ik niet zeker weet of dit doorgaans de "beste" methode is. Maar welicht heeft iemand er iets aan, of kunt u mij op betere ideëen brengen.
Ipv een functie-pointer naar de .NET DLL te sturen, heb ik een interface object gemaakt:
Code:
VB.NET
Public Interface DEV_CallBackObject
Sub test(byval data as integer)
End Interface
...
' Delphi programma roept onderstaande functie aan om een callback object toe te wijzen
sub setCallBacks( byval cbo as DEV_CallBackObject )
De "cbo" variabele uit bovenstaande code is een object uit het Delphi programma. Deze class heeft dan de specifieke afhandeling voor de functie "test":
Code:
// interface "dev_callBackObject" staat in de automatisch gegenereerde _TLB.pas unit die je krijgt bij "project > import type library"
TDEV_CallBacks = class(TInterfacedObject, DEV_CallBackObject)
// Specifieke uitvoering van functie "test", binnen het Delphi programma
// dus. VB DLL kan via de gegeven "cbo" deze functie aanroepen.
procedure test( data : Integer );
// Deze rommel moest ik ook perse implementeren. Weet niet of het erg is,
// maar de functies heb ik leeg gelaten...
function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
end;
...
cbo := TDEV_CallBacks.Create;
DLL.setCallBacks( cbo );
Het lijkt tot dusver te werken (ook met die @#$@# strings )
Bookmarks