masterjcl
Mitglied
Hallo
Ich habe ein kleines Problem ich habe eine DLL die falsche Parameter bekommt dies betrifft einen Kartenleser, ich möchte einige Parameter beim Call verändern. Dazu habe ich mir gedacht ich schreibe eine DLL die die Orginal wrapped. Leider funktioniert das ganz nicht so wie ich mir das gedacht habe. Ich benutze das Visual Studio. Die Orginal dll is ct32.dll diese dll hat 3 Funktionen. Leider steigt beim laden der dll die Anwendung aus.
Wrap class header und cpp
vorgenerierte cpp Klasse zum exportieren, meine Vermutung ist das er die nicht als dll funtionen einbindet, VS kompiliert sie aber und linkt sie auch.
wo liegt das Problem sollte doch eigentlich funktioniern
mfg
Ich habe ein kleines Problem ich habe eine DLL die falsche Parameter bekommt dies betrifft einen Kartenleser, ich möchte einige Parameter beim Call verändern. Dazu habe ich mir gedacht ich schreibe eine DLL die die Orginal wrapped. Leider funktioniert das ganz nicht so wie ich mir das gedacht habe. Ich benutze das Visual Studio. Die Orginal dll is ct32.dll diese dll hat 3 Funktionen. Leider steigt beim laden der dll die Anwendung aus.
Wrap class header und cpp
Code:
#pragma once
#include <windows.h>
class HEXWrap
{
/* DLL Importe */
typedef CHAR (WINAPI *CT_INIT) (USHORT, USHORT);
typedef CHAR (WINAPI *CT_DATA) (USHORT, UCHAR*, UCHAR*, USHORT, UCHAR*, USHORT*, UCHAR*);
typedef CHAR (WINAPI *CT_CLOSE) (USHORT);
HINSTANCE hDLL; CT_INIT CT_init; CT_DATA CT_data; CT_CLOSE CT_close;
public:
HEXWrap(void);
~HEXWrap(void);
char HEX_CT_INIT(
USHORT,
USHORT
);
char HEX_CT_DATA(
USHORT,
UCHAR*,
UCHAR* ,
USHORT,
UCHAR* ,
USHORT*,
UCHAR*
);
char HEX_CT_CLOSE(USHORT);
};
// ------------------ cpp
#include "StdAfx.h"
#include "HEXWrap.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <atlconv.h>
#include "windows.h"
HEXWrap::HEXWrap(void)
{
char *dllname; // Name der CTAPIDLL
dllname = "ct32.dll"; // dllname setzen
LPCWSTR lpcwstr_string = A2BSTR(dllname);
hDLL = LoadLibrary(lpcwstr_string);
/* DLL Handler setzen */
CT_init = (CT_INIT)GetProcAddress(hDLL,"CT_init");
CT_data = (CT_DATA)GetProcAddress(hDLL,"CT_data");
CT_close = (CT_CLOSE)GetProcAddress(hDLL,"CT_close");
if (hDLL == NULL){ PostQuitMessage (0); printf("DLL konnte nicht geladen werden !");exit(0);}//send exit
}
HEXWrap::~HEXWrap(void)
{
FreeLibrary(hDLL); /* DLL aus dem Speicher entfernen */
}
char HEXWrap::HEX_CT_INIT(
USHORT ctn,
USHORT ptn){
return CT_init(ctn,ptn);
}
char HEXWrap::HEX_CT_DATA(
USHORT ctn,
UCHAR *quelle,
UCHAR *ziel,
USHORT komm_laenge,
UCHAR *kommando,
USHORT *retlaenge,
UCHAR *ret_wert
)
{
return CT_data(ctn, quelle, ziel, komm_laenge, kommando, retlaenge, ret_wert);
}
char HEXWrap::HEX_CT_CLOSE(USHORT ctn)
{
return CT_close(ctn);
}
vorgenerierte cpp Klasse zum exportieren, meine Vermutung ist das er die nicht als dll funtionen einbindet, VS kompiliert sie aber und linkt sie auch.
Code:
// CTAPIHEX.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung.
//
// CT API Wrapper
#include "stdafx.h"
#include "HEXWrap.h"
#define DllExport __declspec(dllexport)
HEXWrap *hexwrap;
void checkInstance(){
if(hexwrap==0){
hexwrap= new HEXWrap();
}
}
char DllExport WINAPI CT_init(
USHORT ctn,
USHORT ptn)
{
checkInstance();
return hexwrap->HEX_CT_INIT(ctn,ptn);
}
char DllExport WINAPI CT_data(
USHORT ctn,
UCHAR *quelle,
UCHAR *ziel,
USHORT komm_laenge,
UCHAR *kommando,
USHORT *retlaenge,
UCHAR *ret_wert
)
{
checkInstance();
return hexwrap->HEX_CT_DATA(ctn,quelle,ziel,komm_laenge,kommando,retlaenge,ret_wert);
}
char DllExport WINAPI CT_close(USHORT ctn)
{
checkInstance();
return hexwrap->HEX_CT_CLOSE(ctn);
}
wo liegt das Problem sollte doch eigentlich funktioniern
mfg