D
Hallo Gemeinde,
mein kleines Programm scheint nicht zu laufen - ich vermutet einen Fehler in der Funktionsdeklaration bzw. im Funktionsaufruf.
Folgende Situation:
Es wird auf eine DLL zugegriffen, bzw. auf deren Funktion EXPORT.
In der Funktion wird auf eine andere DLL verwiesen (DLL1). Diese hat 2 Funkionen - INIT und CTRL, die nach CDECL calling convention folgendermassen definiert sind:
void INIT(double *array1, double *array2);
void CTRL double *array1, double *array2);
Nachfolgend der Quellcode meiner DLL mit der Funktion EXPORT:
#include <stdio.h>
#include <string.h>
#include <windows.h>
typedef void (__cdecl *CTRL)(double*, double*);
typedef void (__cdecl *INIT)(double*, double*);
double dll1_in_array1[101]; //je ein Array für Input und Output
double dll1_out_array1[101]; //und je Funktion.
double dll1_in_array2[101]; //diese werden später and die Funktionen
double dll1_out_array2[101]; //übergeben
INIT call_dll1_Init;
CTRL call_dll1_Ctrl;
HINSTANCE hinstlib_dll1= LoadLibrary(L"DLL1.dll");
extern "C" {
void __declspec(dllexport) __cdecl EXPORT(float *var1,int *var2, char *var3, char *var4, char *var5);}
void __declspec(dllexport) __cdecl EXPORT(float *var1,int *var2, char *var3, char *var4, char *var5)
{
call_dll1_Init=(INIT)GetProcAddress(hinstlib_dll1,"INIT");
call_dll1_Ctrl=(CTRL)GetProcAddress(hinstlib_dll1,"CTRL");
.
.
.
call_dll1_Init(dll1_in_array1,dll1_out_array1); //Aufruf der Funktionen
call_dll1_Ctrl(dll1_in_array2,dll1_out_array2);
.
.
.
Der tiefere Sinn ist also, die Arrays and die DLL zu schicken, wo das inputarray benutzt wird, um das outputarray mit Daten zu "betanken".
Das Einbindung klappt hervorragend, augescheinlich scheint auch der Funktionsaufruf, z.B.
call_dll1_Init(dll1_in_array1,dll1_out_array1);
zu funktionieren.
ich bin mir jedoch unsicher, ob für die cdecl calling convention
void INIT(double *array1, double *array2);
die Deklaration
typedef void (__cdecl *INIT)(double*, double*);
die richtige ist, zumal bei z.B.
typedef void (__cdecl *CTRL)(double *input, double *output);
auch keine Fehlermeldungen auftreten
Danke für die Antworten.