Ich habe nun eine Lösung für das Problem gefunden.
Beim Laden der Wrapper
DLL werden auch diverse OCC
DLL
geladen und Initialisiert.
Dabei werden Daten an StdErr ausgegeben.
In einem
VCL Programm sind die Standardausgaben aber
nicht vorhanden.
Der Aufruf aus einem Delphi Konsolenprogramm
funktioniert hingegen ohne Probleme.
Als Lösung binde ich die
DLL nun dynamisch ein, und setze
vorher aber die Standardausgaben.
Delphi-Quellcode:
unit OCCWrapper;
interface
uses
System.Classes,
WinApi.Windows;
const
LibName = '
OCCWrapper.dll';
var
prevStdOutputHandle : NativeUInt;
prevStdErrorHandle : NativeUInt;
OCCLibHnd: THandle;
StdFileStream: TFileStream;
implementation
initialization
prevStdOutputHandle := GetStdHandle(STD_OUTPUT_HANDLE);
prevStdErrorHandle := GetStdHandle(STD_ERROR_HANDLE );
StdFileStream := TFileStream.Create('
C:\Temp\output.log', fmCreate);
SetStdHandle(STD_OUTPUT_HANDLE, StdFileStream.Handle);
SetStdHandle(STD_ERROR_HANDLE , StdFileStream.Handle);
OCCLibHnd := LoadLibrary(LibName);
finalization
FreeLibrary(OCCLibHnd);
OCCLibHnd := 0;
SetStdHandle(STD_OUTPUT_HANDLE, prevStdOutputHandle);
SetStdHandle(STD_ERROR_HANDLE , prevStdErrorHandle );
StdFileStream.Free;
StdFileStream:=nil;
end.
prevStdOutputHandle und prevStdErrorHandle sind gleich Null,
und nur der Form halber mit GetStdHandle abgefragt.