Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT load.dll未调用解析_C++_Qt_Dll - Fatal编程技术网

C++ QT load.dll未调用解析

C++ QT load.dll未调用解析,c++,qt,dll,C++,Qt,Dll,由于某些原因,我可以将.dll很好地加载到应用程序中,但当我调用resolve函数时,它总是说无法加载函数 typedef void (*SetKey_func)(const char *, const char *, const char *, const char *); Crypt::Crypt(QObject *parent) : QObject(parent) { } Crypt::~Crypt() { } void Crypt::LoadCrypt() {

由于某些原因,我可以将.dll很好地加载到应用程序中,但当我调用resolve函数时,它总是说无法加载函数

typedef void (*SetKey_func)(const char *, const char *, const char *, const char *);

Crypt::Crypt(QObject *parent) : QObject(parent)
{
}

Crypt::~Crypt()
{

}

void Crypt::LoadCrypt()
    {

        QString file = QCoreApplication::applicationDirPath() + "/RockBase.dll";

        library.setFileName(file);
        library.load();

        if( !library.isLoaded() )
        {
            //file not loaded
            return;
        }
        else
        {
            // file loaded
        }
    }
然后我的函数decsetkey只在.dll中设置键

void Crypt::DecSetKey()
{

    quint8 decKey1[] = { 0x7D, 0x44, 0x01, 0x00, 0x83, 0xEC, 0x24, 0x83, 0x25, 0xB8, 0x8C, 0x4A, 0x0D, 0x56, 0x8B, 0x75 };
    quint8 decKey2[] = { 0x1C, 0x8D, 0x1C, 0x57, 0x50, 0xCE, 0xE8, 0x6F, 0x85, 0xFE, 0xFF, 0x8B };
    quint8 decKey3[] = { 0x76, 0x0C, 0x50, 0x45, 0x14, 0x83, 0x65, 0xFC, 0x56, 0x50, 0x7D, 0xD1, 0x74, 0x03, 0xB8, 0x43 };
    quint8 decKey4[] = { 0x8B, 0x47, 0xDD, 0x6A, 0xE8, 0x14, 0x83, 0xC4, 0xBC, 0xF3, 0x7F, 0x75 };

    SetKey_func s_d_func = (SetKey_func)library.resolve( "?SetKey@CCrypto@RockBase@@QAEXPBD000@Z" );
    if( s_d_func )
    {
        //"Successful loading of Decrypt CCrypto::SetKey function."));
        s_d_func( 0, (const char*)decKey1, 0, 0 );
        s_d_func((const char*)decKey2, 0, 0, 0);
        s_d_func(0, (const char*)decKey3, 0, 0);
        s_d_func((const char*)decKey4, 0, 0, 0);
    }
    else
    {
        //Unable to load Decrypt CCrypto::SetKey function."));
    }
}
我在另一个类中调用函数

void patch::readdata()
{
        Crypt *cryptinstance = new Crypt(this);
        cryptinstance->DecSetKey();
}

我认为指针在我点击它之后被破坏了。任何帮助都会非常有用,谢谢您的时间。

从命令行执行
dumpbin/exports RockBaseML.dll
。您将看到没有像
这样的导出函数?SetKey@CCrypto@岩基@@QAEXPBD000@Z
当您的代码尝试搜索时。我找到的最接近的是这一组:

C:\Users\jselbie\Downloads>dumpbin /exports RockBaseML.dll | findstr /i SetKey
    116   73 00004DCF ?SetKey@CAesCrypto@RockBase@@UAEXPBD@Z
    117   74 00004F3D ?SetKey@CDesCrypto@RockBase@@UAEXPBD@Z
    118   75 00005051 ?SetKey@CRcCrypto@RockBase@@UAEXPBD@Z
    119   76 0000525E ?SetKey@CRockCrypto@RockBase@@QAEXPBD000@Z
    120   77 000054F2 ?SetKey@CStrmCrypto@RockBase@@UAEXPBD@Z

执行
dumpbin/exports Rockbase.dll
。您确定名称已损坏的函数签名正确吗?另外,您可能真的希望导出一个“外部C”函数而不是C++函数。Ya的名字被损坏了。我不能访问LIB或头文件。只要DLL任何建议都共享DLL,我就可以告诉您出了什么问题……/*VisualStudioC++ 6(.dll);出口报关119?SetKey@CRockCrypto@岩基@@QAEXPBD000@Z ; 属性:基于bp的帧;void _uthiscall RockBase::CRockCrypto::SetKey(RockBase::CRockCrypto this,const char*,const char*,const char*)public?SetKey@CRockCrypto@岩基@@QAEXPBD000@Z ?SetKey@CRockCrypto@岩基@@QAEXPBD000@Zproc near*/这应该是:typedef void(*SetKey_func)(作废此PTR,常量字符*,常量字符*,常量字符*,常量字符*);然后我将获得类实例ptr。但不确定如何做到这一点。我的意思是,发送一份DLL副本给我。?SetKey@CRockCrypto@岩基@@QAEXPBD000@Z我使用的是源代码中的输入错误。你能解释一下为什么我的.dll不能正常工作吗?我加载了dll,抓取了进程,传递了一个带有参数的函数,它是j你知道为什么吗?抱歉。该DLL与我没有的其他DLL有依赖关系。我没有足够的数据继续。我已经尝试过了。抱歉,应该发布其他DLL。在这里尝试一下,看看你能想出什么。谢谢你的帮助。。