新手求指導!
還有c++builder 如何呼叫vc撰寫的dll!
謝謝 !!!
uj5u.com熱心網友回復:
工程檔案擴展名是什么?uj5u.com熱心網友回復:
不太清楚你指的什么 可以在說明白點嗎uj5u.com熱心網友回復:
BCB一個轉換vc專案的功能,不過從來沒用過,不知道好用不好用,如果僅僅是呼叫dll的話,有兩個方法:1)看看vc提供的有沒有lib檔案和頭檔案,如果有的話,可以直接加到bcb的專案中,可能需要COFF到OMF的轉化,這個搜索下很多文章
2)如果沒有lib檔案,但是有頭檔案或者知道dll中函式的引數,那么也可以動態加載,使用
LoadLibrary配合GetProcAddress
uj5u.com熱心網友回復:
@9527我感覺你說的第二個應該不錯 剛才老大也讓我用loadlibarary 他說讓我自己先寫一個小程式 然后在運用他提供的頭檔案和.dll動態庫 你讓再舉個例子嗎 謝謝!
uj5u.com熱心網友回復:
我原來封裝的操作讀卡器的代碼:頭檔案
//---------------------------------------------------------------------------
#ifndef __T6_ULC_H
#define __T6_ULC_H
#include <windows.h>
//---------------------------------------------------------------------------
class IC_T6_ULC{
public:
IC_T6_ULC();
~IC_T6_ULC();
FARPROC execT6_ULC_Proc(char *procName);
typedef HANDLE __stdcall (*TP_IC_InitComm)(__int16 port);
typedef __int16 __stdcall (*TP_IC_ExitComm)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Status)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Down)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_InitType )(HANDLE idComDev,__int16 type);
typedef __int16 __stdcall (*TP_IC_Read)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char * databuffer);
typedef __int16 __stdcall (*TP_IC_Write)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
typedef __int16 __stdcall (*TP_IC_CheckCard)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_ReadVer)(HANDLE idComDev,unsigned char *Ver);
typedef __int16 __stdcall (*TP_hex2asc)(unsigned char *strhex,unsigned char *strasc,__int16 length);
typedef __int16 __stdcall (*TP_asc2hex)(unsigned char *strasc,unsigned char *strhex,__int16 length);
//
typedef __int16 __stdcall (*TP_IC_CpuGetProtocol)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_CpuReset)(HANDLE idComDev,unsigned char *rlen, unsigned char *databuffer);
typedef __int16 __stdcall (*TP_IC_CpuApdu)(HANDLE idComDev,unsigned char slen,unsigned char * sendbuffer,unsigned char *rlen,unsigned char * databuffer);
typedef __int16 __stdcall (*TP_IC_CpuReset_Hex)(HANDLE idComDev,unsigned char *rlen, unsigned char *databuffer);
typedef __int16 __stdcall (*TP_IC_CpuApdu_Hex)(HANDLE idComDev,unsigned char slen,unsigned char * sendbuffer,unsigned char *rlen,unsigned char * databuffer);
typedef __int16 __stdcall (*TP_IC_ReadProtection)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char* protbuffer);
typedef __int16 __stdcall (*TP_IC_ReadProtection_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char* protbuffer);
typedef __int16 __stdcall (*TP_IC_ReadWithProtection)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char* protbuffer);
typedef __int16 __stdcall (*TP_IC_ReadWithProtection_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char* protbuffer);
typedef __int16 __stdcall (*TP_IC_WriteProtection)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *protbuffer);
typedef __int16 __stdcall (*TP_IC_WriteWithProtection)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
typedef __int16 __stdcall (*TP_IC_WriteProtection_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *protbuffer);
typedef __int16 __stdcall (*TP_IC_WriteWithProtection_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char * writebuffer);
typedef __int16 __stdcall (*TP_IC_ReadPass_SLE4442)(HANDLE idComDev,unsigned char*password);
typedef __int16 __stdcall (*TP_IC_ReadCount_SLE4442)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_CheckPass_SLE4442)(HANDLE idComDev,unsigned char* password);
typedef __int16 __stdcall (*TP_IC_ChangePass_SLE4442)(HANDLE idComDev,unsigned char*password);
//
typedef __int16 __stdcall (*TP_IC_CheckPass_4442hex)(HANDLE idComDev,unsigned char*password);
typedef __int16 __stdcall (*TP_IC_ChangePass_4442hex)(HANDLE idComDev,unsigned char*password);
typedef __int16 __stdcall (*TP_IC_ReadPass_4442hex)(HANDLE idComDev,unsigned char*password);
//
typedef __int16 __stdcall (*TP_IC_ReadCount_SLE4428)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_CheckPass_SLE4428)(HANDLE idComDev,unsigned char* password);
typedef __int16 __stdcall (*TP_IC_ChangePass_SLE4428)(HANDLE idComDev,unsigned char* password);
//
typedef __int16 __stdcall (*TP_IC_CheckPass_4428hex)(HANDLE idComDev,unsigned char* password);
typedef __int16 __stdcall (*TP_IC_ChangePass_4428hex)(HANDLE idComDev,unsigned char* password);
//
typedef __int16 __stdcall (*TP_IC_Write24)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
typedef __int16 __stdcall (*TP_IC_Write64)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
//hex read and write.
typedef __int16 __stdcall (*TP_IC_Write_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
typedef __int16 __stdcall (*TP_IC_Read_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char * databuffer);
typedef __int16 __stdcall (*TP_IC_Write24_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
typedef __int16 __stdcall (*TP_IC_Write64_Hex)(HANDLE idComDev,__int16 offset,__int16 len,unsigned char *writebuffer);
//
typedef __int16 __stdcall (*TP_Read_24C)(HANDLE idComDev,short offset,short len, unsigned char *reData);
typedef __int16 __stdcall (*TP_Write_24C)(HANDLE idComDev,short offset,short len, unsigned char *wrData);
typedef __int16 __stdcall (*TP_Read_24C64)(HANDLE idComDev,short offset,short len, unsigned char *reData);
typedef __int16 __stdcall (*TP_Write_24C64)(HANDLE idComDev,short offset,short len, unsigned char *wrData);
//
typedef __int16 __stdcall (*TP_IC_Check_4442)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_4428)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_24C01)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_24C02)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_24C04)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_24C08)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_24C16)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_24C64)(HANDLE idComDev);
typedef __int16 __stdcall (*TP_IC_Check_CPU)(HANDLE idComDev);
TP_IC_InitComm IC_InitComm;
TP_IC_ExitComm IC_ExitComm;
TP_IC_Status IC_Status;
TP_IC_Down IC_Down;
TP_IC_InitType IC_InitType;
TP_IC_Read IC_Read;
TP_IC_Write IC_Write;
TP_IC_CheckCard IC_CheckCard;
TP_IC_ReadVer IC_ReadVer;
TP_hex2asc hex2asc;
TP_asc2hex asc2hex;
TP_IC_CpuGetProtocol IC_CpuGetProtocol;
TP_IC_CpuReset IC_CpuReset;
TP_IC_CpuApdu IC_CpuApdu;
TP_IC_CpuReset_Hex IC_CpuReset_Hex;
TP_IC_CpuApdu_Hex IC_CpuApdu_Hex;
TP_IC_ReadProtection IC_ReadProtection;
TP_IC_ReadProtection_Hex IC_ReadProtection_Hex;
TP_IC_ReadWithProtection IC_ReadWithProtection;
TP_IC_ReadWithProtection_Hex IC_ReadWithProtection_Hex;
TP_IC_WriteProtection IC_WriteProtection;
TP_IC_WriteWithProtection IC_WriteWithProtection;
TP_IC_WriteProtection_Hex IC_WriteProtection_Hex;
TP_IC_WriteWithProtection_Hex IC_WriteWithProtection_Hex;
TP_IC_ReadPass_SLE4442 IC_ReadPass_SLE4442;
TP_IC_ReadCount_SLE4442 IC_ReadCount_SLE4442;
TP_IC_CheckPass_SLE4442 IC_CheckPass_SLE4442;
TP_IC_ChangePass_SLE4442 IC_ChangePass_SLE4442;
TP_IC_CheckPass_4442hex IC_CheckPass_4442hex;
TP_IC_ChangePass_4442hex IC_ChangePass_4442hex;
TP_IC_ReadPass_4442hex IC_ReadPass_4442hex;
TP_IC_ReadCount_SLE4428 IC_ReadCount_SLE4428;
TP_IC_CheckPass_SLE4428 IC_CheckPass_SLE4428;
TP_IC_ChangePass_SLE4428 IC_ChangePass_SLE4428;
TP_IC_CheckPass_4428hex IC_CheckPass_4428hex;
TP_IC_ChangePass_4428hex IC_ChangePass_4428hex;
TP_IC_Write24 IC_Write24;
TP_IC_Write64 IC_Write64;
TP_IC_Write_Hex IC_Write_Hex;
TP_IC_Read_Hex IC_Read_Hex;
TP_IC_Write24_Hex IC_Write24_Hex;
TP_IC_Write64_Hex IC_Write64_Hex;
TP_Read_24C Read_24C;
TP_Write_24C Write_24C;
TP_Read_24C64 Read_24C64;
TP_Write_24C64 Write_24C64;
TP_IC_Check_4442 IC_Check_4442;
TP_IC_Check_4428 IC_Check_4428;
TP_IC_Check_24C01 IC_Check_24C01;
TP_IC_Check_24C02 IC_Check_24C02;
TP_IC_Check_24C04 IC_Check_24C04;
TP_IC_Check_24C08 IC_Check_24C08;
TP_IC_Check_24C16 IC_Check_24C16;
TP_IC_Check_24C64 IC_Check_24C64;
TP_IC_Check_CPU IC_Check_CPU;
HANDLE WINAPI Open( char *PortName);
int WINAPI Close( );
BOOLEAN CardPresent();
protected:
BOOLEAN loadT6_ULC_proc();
void freeT6_ULC_proc();
private:
BOOLEAN FPortOpened;
HANDLE icdev;
};
IC_T6_ULC *T6_ULCReader();
void releaseT6_ULCReader(void);
#endif
uj5u.com熱心網友回復:
CPP檔案:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "T6_ULC.h"
#include "PubFunc.h"
#include "CardReaderWrap.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
const char T6_ULCDLLFileName[] = ".\\dll\\dculc.dll";
static IC_T6_ULC *icreader = NULL;
static int Port_Handle;
static HINSTANCE hDllInstance;
IC_T6_ULC *T6_ULCReader()
{
if(!icreader)
{
icreader = new IC_T6_ULC;
}
return icreader;
}
void releaseT6_ULCReader(void)
{
if(icreader)
{
icreader->Close();
delete icreader;
icreader = NULL;
}
}
HANDLE WINAPI IC_T6_ULC::Open(char *PortName)
{
int iCom;
if(FPortOpened)
return 0;
ScanPort(iCom);
icdev = IC_InitComm(iCom);
FPortOpened = !((int)icdev<0);
return icdev;
}
int WINAPI IC_T6_ULC::Close( )
{
int iResult = -1;
if(FPortOpened)
{
if(int(icdev)>0)
{
iResult=IC_ExitComm(icdev);
//bool bSuccessClosed = (st==0);
FPortOpened = false;
icdev=0;
}
}else{
iResult = 0;
}
return iResult;
}
BOOLEAN IC_T6_ULC::CardPresent()
{
int st = IC_Status(icdev);
return st>=0 && st!=1;
}
BOOLEAN IC_T6_ULC::loadT6_ULC_proc()
{
if(!hDllInstance)
{
hDllInstance = LoadDriver(T6_ULCDLLFileName);
if(hDllInstance)
{
IC_InitComm = (TP_IC_InitComm)execT6_ULC_Proc("IC_InitComm");
IC_ExitComm = (TP_IC_ExitComm)execT6_ULC_Proc("IC_ExitComm");
IC_Status = (TP_IC_Status)execT6_ULC_Proc("IC_Status");
IC_InitType = (TP_IC_InitType)execT6_ULC_Proc("IC_InitType");
IC_ReadCount_SLE4442 = (TP_IC_ReadCount_SLE4442)execT6_ULC_Proc("IC_ReadCount_SLE4442");
IC_CheckPass_4442hex = (TP_IC_CheckPass_4442hex)execT6_ULC_Proc("IC_CheckPass_4442hex");
IC_Write = (TP_IC_Write)execT6_ULC_Proc("IC_Write");
IC_Read = (TP_IC_Read)execT6_ULC_Proc("IC_Read");
IC_ReadProtection = (TP_IC_Read)execT6_ULC_Proc("IC_ReadProtection");
IC_ChangePass_SLE4442 = (TP_IC_ChangePass_SLE4442)execT6_ULC_Proc("IC_ChangePass_SLE4442");
IC_ChangePass_4442hex = (TP_IC_ChangePass_4442hex)execT6_ULC_Proc("IC_ChangePass_4442hex");
}
}
return (hDllInstance!=0);
}
void IC_T6_ULC::freeT6_ULC_proc()
{
if(FPortOpened)
{
if(hDllInstance)
{
FreeLibrary(hDllInstance);
hDllInstance = NULL;
}
}
}
IC_T6_ULC::IC_T6_ULC()
{
hDllInstance = NULL;
FPortOpened = FALSE;
if(!loadT6_ULC_proc())
{
return;
}
}
IC_T6_ULC::~IC_T6_ULC()
{
freeT6_ULC_proc();
}
FARPROC IC_T6_ULC::execT6_ULC_Proc(char *procName)
{
FARPROC hRegisterProc;
if(hDllInstance!=NULL)
{
hRegisterProc = GetProcAddress(hDllInstance, procName);
}
return hRegisterProc;
}
uj5u.com熱心網友回復:
里面的LoadLibrary函式
//------------------------------------------------------------------------------
// 用途:封裝了API LoadLibrary,增加了檔案是否存在的檢驗
//------------------------------------------------------------------------------
HINSTANCE LoadDriver(LPCTSTR lpLibFileName)
{
AnsiString dllFileName = UGetAppDir()+"\\dll\\"+ExtractFileName(lpLibFileName);
if(FileExists(dllFileName))
{
return LoadLibrary(dllFileName.c_str());
}else{
UErrorMsgBox("驅動動態庫檔案["+dllFileName+"]不存在,后續操作將無法正常運行,請檢查安裝檔案是否正確!");
return NULL;
}
}
uj5u.com熱心網友回復:
你們投太高深了。你先把根目錄下的檔案名列一下,或者簡單點。
搜索*.bpr ,*.bp 啥的 是BCB。
要是有啥vs project的是VC。 糟糕了。 我自己都忘記了。 生疏了。
uj5u.com熱心網友回復:

VC6的是*.dsw
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59025.html
標籤:茶館
上一篇:最接近神的人 reverse
