我的dll源代码:
class signatureMethod
{
signaureMethod() {};
~signatureMethod() {};
virtual void sign()=0;
virtual void verify()=0;
}
class RSAMethod :: public signatureMethod
{
Rsasign() {};
~Rsasign() {};
virtual void sign() {....省略.};
virtual void verify() {....省略};
}在dll中.cpp的主要代码:
//声明动态连接库原形
signatureMethod * getsignaturedll();
//动态连接库接口
BOOL WINAPI/*or APIENTRY */ DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ return TRUE;}
RSAMethod RsaMethod;signatureMethod * getsignaturedll()
{
return (signatureMethod*)(&RsaMethod);
}至此,RSAMethodDll.dll编译成功,
应用到exe文件中就有了问题
//提取签名算法的dll,进行验证
HINSTANCE hdll=NULL;
hdll=::LoadLibrary("RSAMethodDll.dll");
SignMethodDll=(getSignMethodDll)::GetProcAddress(hdll,"getsignaturedll");
signatureMethod *RSAsign=SignMethodDll();
bool flag=RSAsign->verify(pubKey,message,signatureValue);
端点跟踪每次都是进入sign()函数。我就试着在dll中去掉sign(),就通过了,
真是奇怪,不知道我那儿弄错了,请各位帮帮我,多谢多谢
class signatureMethod
{
signaureMethod() {};
~signatureMethod() {};
virtual void sign()=0;
virtual void verify()=0;
}
class RSAMethod :: public signatureMethod
{
Rsasign() {};
~Rsasign() {};
virtual void sign() {....省略.};
virtual void verify() {....省略};
}在dll中.cpp的主要代码:
//声明动态连接库原形
signatureMethod * getsignaturedll();
//动态连接库接口
BOOL WINAPI/*or APIENTRY */ DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ return TRUE;}
RSAMethod RsaMethod;signatureMethod * getsignaturedll()
{
return (signatureMethod*)(&RsaMethod);
}至此,RSAMethodDll.dll编译成功,
应用到exe文件中就有了问题
//提取签名算法的dll,进行验证
HINSTANCE hdll=NULL;
hdll=::LoadLibrary("RSAMethodDll.dll");
SignMethodDll=(getSignMethodDll)::GetProcAddress(hdll,"getsignaturedll");
signatureMethod *RSAsign=SignMethodDll();
bool flag=RSAsign->verify(pubKey,message,signatureValue);
端点跟踪每次都是进入sign()函数。我就试着在dll中去掉sign(),就通过了,
真是奇怪,不知道我那儿弄错了,请各位帮帮我,多谢多谢
class signatureMethod
{
signaureMethod() {};
~signatureMethod() {};
virtual void sign()=0;
virtual void verify()=0;
}
class RSAMethod :: public signatureMethod
{
Rsasign() {};
~Rsasign() {};
virtual void sign() {....省略.};
virtual void verify() {....省略};
}#pragma pack(pop)
怎么
class RSAMethod :: public signatureMethod
{
Rsasign() {}; //这是怎么回事咯!!!!
~Rsasign() {};
virtual void sign() {....省略.};
virtual void verify() {....省略};
}
你写一个def文件,就应该可以了。
我怎么试验都得不到你的结果?(我没有抄你的代码)
//DLL
#include <iostream.h>
#include <windows.h>
class signatureMethod
{
public:
signaureMethod() {};
~signatureMethod() {};
virtual void sign()=0;
virtual void verify()=0;
};
class RSAMethod : public signatureMethod
{
public:
RSAMethod() {};
~RSAMethod() {};
virtual void sign() { cout << "sign " << endl;};
virtual void verify() {cout << "verify " << endl;};
};//声明动态连接库原形
//signatureMethod * getsignaturedll();
//动态连接库接口
BOOL WINAPI/*or APIENTRY */ DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ return TRUE;}
RSAMethod RsaMethod;
//没有extern "C" 的话EXE中GetProcAddress改为相应的
//?getsignaturedll@@YAPAVsignatureMethod@@XZ
extern "C" __declspec(dllexport) signatureMethod * getsignaturedll()
{
return (signatureMethod*)(&RsaMethod);
}
//EXE
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
class signatureMethod
{
public:
signaureMethod() {};
~signatureMethod() {};
virtual void sign()=0;
virtual void verify()=0;
};typedef signatureMethod* (*getsignaturedll)(void);
//class signatureMethod * getsignaturedll(void);
int main(int argc, char *argv[])
{
//*
//typedef (signatureMethod *)(*getSignMethodDll)(); getsignaturedll SignMethodDll = NULL;
HINSTANCE hdll=NULL;
hdll=::LoadLibrary("signdll.dll");
cout << "load " << hdll << endl;
SignMethodDll=(hdll == NULL ? NULL : (getsignaturedll)::GetProcAddress(hdll,
"getsignaturedll")/* "?getsignaturedll@@YAPAVsignatureMethod@@XZ" */);
cout << "getprocaddress " << SignMethodDll << endl;
signatureMethod *RSAsign=SignMethodDll == NULL ? NULL : (signatureMethod *)SignMethodDll();
if (RSAsign != NULL)
{
RSAsign->verify();
}
FreeLibrary(hdll);
//*/
//class signatureMethod * RSASign = getsignaturedll();
//RSASign->verify();
return 0;
}
//DLL 编译 CL xx.cpp /LD
//EXE 编译 CL XX。CPP