000
10.08.2008, 23:47 Uhr
~matras
Gast
|
Hallo! Ich habe für meine 3schichtige Anwendung ein Setup geschrieben. Unter anderem werden über das Setup auf einen Applicationsserver DLL-Dateien kopiert, die in C++ über *.rc-Dateien verfügbar gemacht werden.
Also Beispielcode der rc-Datei
FB_UDF_FILE1 RT_RCDATA "udf\\hwl_udf_getRegistryKey.dll"
Nach dem compilieren verfügt das Setup über eine RES-Datei, auf die über das Programm zugegriffen werden kann.
Im Setup habe ich nun eine Klasse für das Kopieren der Programmdateien wie folgt geschrieben:
__fastcall HCopyFiles::HCopyFiles(TComponent *Owner)
{
............................
String cpyFile="hwl_udf_getRegistryKey.dll";
String installFullPath=directory+cpyFile;
copyFile(hInstance, "FB_UDF_FILE1", "RT_RCDATA", installFullPath);
...........................
}
void __fastcall HCopyFiles::copyFile(int hInstance, char* fileName, char* fileType, String installFullPath)
{
try {
TResourceStream *RStream=new TResourceStream(hInstance, fileName, fileType);
try {
TFileStream *FStream=new TFileStream(installFullPath.c_str(), fmCreate);
try {
FStream->CopyFrom(RStream, RStream-Size);
}
catch ...............
.............................
............
}
Die kopierte dll-Datei wird in das UDF-Verzeichnis von Firebird 2.1 kopiert, in einer Datenbank deklariert und über eine Stored-Procedure verwendet.
Wenn ich nun die Stored-Procedure im Programm aufrufe, bekomme ich nicht den Wert zurück, den die dll aus einer INI-Datei auslesen müßte, sondern '-1'.
Kopiere ich die selbe dll - Datei aber manuell in das UDF-Verzeichnis von Firebird bekomme ich das richtige Ergebnis.
Es muß also irgendwie mit dem Kopiervorgang zusammenhängen. Bei dem Kopiervorgang ist mir auch aufgefallen, daß die Datei von ursprünglich 390.000 Bytes auf 385.000 Bytes schrumpft - warum ??? |