小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

新人請(qǐng)教用LoadLibrary和GetProcAddress動(dòng)態(tài)加載DLL

 quasiceo 2013-12-05
下面這一段是動(dòng)態(tài)加載dll的部分。
C/C++ code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
HMODULE hDll=LoadLibrary("D:\\Code\\1001\\1001\\PrivateDLL.dll");
    if (hDll!=NULL)
    {
        typedef int (* _BinarySearch)(int *a,int length,int number);
        _BinarySearch BinarySearch=NULL;
        BinarySearch=(_BinarySearch)GetProcAddress(hDll,"BinarySearch");
        if (!BinarySearch)
        {
            printf("加載DLL函數(shù)失??!\n");
        
        else
        {
            while(!feof(file))
            {
                fscanf(file,"%d",&temp);
                if (BinarySearch(num,num_count,temp)==-1)
                {
                    printf("No\n");
                
                else
                {
                    printf("Yes\n");
                }
            }
        }
    }
    else
    {
        printf("打開DLL文件失敗\n");
    }
    FreeLibrary(hDll);
    fclose(file);


下面是PrivateDLL.h文件的部分內(nèi)容。我寫的兩個(gè)函數(shù)是BinarySearch,SequentialSearch。

C/C++ code?
1
2
3
4
5
6
7
8
9
10
11
#ifdef PRIVATEDLL_EXPORTS
#define PRIVATEDLL_API __declspec(dllexport)
#else
#define PRIVATEDLL_API __declspec(dllimport)
#endif
extern PRIVATEDLL_API int nPrivateDLL;
PRIVATEDLL_API int fnPrivateDLL(void);
PRIVATEDLL_API int BinarySearch(int *a,int length,int number);
PRIVATEDLL_API int SequentialSearch(int *a,int length,int number);


編譯通過,調(diào)試運(yùn)行時(shí)會(huì)走到“加載DLL函數(shù)失敗”這里。
BinarySearch 值:0x00000000 類型:int (int *, int, int)*

請(qǐng)問各位大俠,該如何解決?
dll c 動(dòng)態(tài)加載
分享到: 更多 0
回復(fù)次數(shù):9
a443475601
a443475601
蘋果皮
等級(jí):Blank
#1 得分:0 回復(fù)于: 2013-03-09 15:26:53
你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣
a443475601
a443475601
蘋果皮
等級(jí):Blank
#2 得分:0 回復(fù)于: 2013-03-09 15:27:35
引用 1 樓 a443475601 的回復(fù):
你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣


你那個(gè)dll 編譯的時(shí)候
#define PRIVATEDLL_EXPORTS了嗎?
lanxinglinxi
lanxinglinxi
lanxinglinxi
等級(jí):Blank
#3 得分:0 回復(fù)于: 2013-03-09 16:01:32
引用 2 樓 a443475601 的回復(fù):
引用 1 樓 a443475601 的回復(fù):你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣


你那個(gè)dll 編譯的時(shí)候
#define PRIVATEDLL_EXPORTS了嗎?

我用depends.exe打開后看到的結(jié)果如下,我不是很懂dll編寫,不過看下面的應(yīng)該是有BinarySearch這個(gè)函數(shù)的。


至于說是否#define PRIVATEDLL_EXPORTS,這個(gè)。。。技術(shù)不到家,我貼出完整dll的代碼,請(qǐng)你幫忙看看吧

下面是PrivateDLL.h
C/C++ code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 下列 ifdef 塊是創(chuàng)建使從 DLL 導(dǎo)出更簡(jiǎn)單的
// 宏的標(biāo)準(zhǔn)方法。此 DLL 中的所有文件都是用命令行上定義的 PRIVATEDLL_EXPORTS
// 符號(hào)編譯的。在使用此 DLL 的
// 任何其他項(xiàng)目上不應(yīng)定義此符號(hào)。這樣,源文件中包含此文件的任何其他項(xiàng)目都會(huì)將
// PRIVATEDLL_API 函數(shù)視為是從 DLL 導(dǎo)入的,而此 DLL 則將用此宏定義的
// 符號(hào)視為是被導(dǎo)出的。
#ifdef PRIVATEDLL_EXPORTS
#define PRIVATEDLL_API __declspec(dllexport)
#else
#define PRIVATEDLL_API __declspec(dllimport)
#endif
// 此類是從 PrivateDLL.dll 導(dǎo)出的
class PRIVATEDLL_API CPrivateDLL {
public:
    CPrivateDLL(void);
    // TODO: 在此添加您的方法。
};
extern PRIVATEDLL_API int nPrivateDLL;
PRIVATEDLL_API int fnPrivateDLL(void);
PRIVATEDLL_API int BinarySearch(int *a,int length,int number);
PRIVATEDLL_API int SequentialSearch(int *a,int length,int number);


下面是PrivateDLL.cpp
C/C++ code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// PrivateDLL.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù)。
//
#include "stdafx.h"
#include "PrivateDLL.h"
// 這是導(dǎo)出變量的一個(gè)示例
PRIVATEDLL_API int nPrivateDLL=0;
// 這是導(dǎo)出函數(shù)的一個(gè)示例。
PRIVATEDLL_API int fnPrivateDLL(void)
{
    return 42;
}
//---------------------------------------------------------------------------------------------------//
//從遞增有序數(shù)組a中查找number,查找成功返回?cái)?shù)字的位置,不成功返回-1;
PRIVATEDLL_API int BinarySearch(int *a,int length,int number)//由于數(shù)組作參數(shù)傳遞時(shí),會(huì)退化為指針,故此函數(shù)的定義加上一個(gè)參數(shù),增加適應(yīng)性;
{
    int low=0,high=length-1;
    while (low<=high)
    {
        int mid=(low+high)/2;
        if (a[mid]==number)
        {
            return mid;
        
        else if (a[mid]>number)
        {
            high=mid-1;
        }
        else
        {
            low=mid+1;
        }
    }
    return -1;
}
PRIVATEDLL_API int SequentialSearch(int *a,int length,int number)
{
    for (int i=0;i<length;i++)
    {
        if (a[i]==number)
        {
            break;
            return i;
        }
    }
    return -1;
}
// 這是已導(dǎo)出類的構(gòu)造函數(shù)。
// 有關(guān)類定義的信息,請(qǐng)參閱 PrivateDLL.h
CPrivateDLL::CPrivateDLL()
{
    return;
}
lanxinglinxi
lanxinglinxi
lanxinglinxi
等級(jí):Blank
#4 得分:0 回復(fù)于: 2013-03-09 16:01:42
引用 2 樓 a443475601 的回復(fù):
引用 1 樓 a443475601 的回復(fù):你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣


你那個(gè)dll 編譯的時(shí)候
#define PRIVATEDLL_EXPORTS了嗎?

我用depends.exe打開后看到的結(jié)果如下,我不是很懂dll編寫,不過看下面的應(yīng)該是有BinarySearch這個(gè)函數(shù)的。


至于說是否#define PRIVATEDLL_EXPORTS,這個(gè)。。。技術(shù)不到家,我貼出完整dll的代碼,請(qǐng)你幫忙看看吧

下面是PrivateDLL.h
C/C++ code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 下列 ifdef 塊是創(chuàng)建使從 DLL 導(dǎo)出更簡(jiǎn)單的
// 宏的標(biāo)準(zhǔn)方法。此 DLL 中的所有文件都是用命令行上定義的 PRIVATEDLL_EXPORTS
// 符號(hào)編譯的。在使用此 DLL 的
// 任何其他項(xiàng)目上不應(yīng)定義此符號(hào)。這樣,源文件中包含此文件的任何其他項(xiàng)目都會(huì)將
// PRIVATEDLL_API 函數(shù)視為是從 DLL 導(dǎo)入的,而此 DLL 則將用此宏定義的
// 符號(hào)視為是被導(dǎo)出的。
#ifdef PRIVATEDLL_EXPORTS
#define PRIVATEDLL_API __declspec(dllexport)
#else
#define PRIVATEDLL_API __declspec(dllimport)
#endif
// 此類是從 PrivateDLL.dll 導(dǎo)出的
class PRIVATEDLL_API CPrivateDLL {
public:
    CPrivateDLL(void);
    // TODO: 在此添加您的方法。
};
extern PRIVATEDLL_API int nPrivateDLL;
PRIVATEDLL_API int fnPrivateDLL(void);
PRIVATEDLL_API int BinarySearch(int *a,int length,int number);
PRIVATEDLL_API int SequentialSearch(int *a,int length,int number);


下面是PrivateDLL.cpp
C/C++ code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// PrivateDLL.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù)。
//
#include "stdafx.h"
#include "PrivateDLL.h"
// 這是導(dǎo)出變量的一個(gè)示例
PRIVATEDLL_API int nPrivateDLL=0;
// 這是導(dǎo)出函數(shù)的一個(gè)示例。
PRIVATEDLL_API int fnPrivateDLL(void)
{
    return 42;
}
//---------------------------------------------------------------------------------------------------//
//從遞增有序數(shù)組a中查找number,查找成功返回?cái)?shù)字的位置,不成功返回-1;
PRIVATEDLL_API int BinarySearch(int *a,int length,int number)//由于數(shù)組作參數(shù)傳遞時(shí),會(huì)退化為指針,故此函數(shù)的定義加上一個(gè)參數(shù),增加適應(yīng)性;
{
    int low=0,high=length-1;
    while (low<=high)
    {
        int mid=(low+high)/2;
        if (a[mid]==number)
        {
            return mid;
        
        else if (a[mid]>number)
        {
            high=mid-1;
        }
        else
        {
            low=mid+1;
        }
    }
    return -1;
}
PRIVATEDLL_API int SequentialSearch(int *a,int length,int number)
{
    for (int i=0;i<length;i++)
    {
        if (a[i]==number)
        {
            break;
            return i;
        }
    }
    return -1;
}
// 這是已導(dǎo)出類的構(gòu)造函數(shù)。
// 有關(guān)類定義的信息,請(qǐng)參閱 PrivateDLL.h
CPrivateDLL::CPrivateDLL()
{
    return;
}
lanxinglinxi
lanxinglinxi
lanxinglinxi
等級(jí):Blank
#5 得分:0 回復(fù)于: 2013-03-09 16:03:12
用代理上網(wǎng)的延遲就是大,提示回復(fù)失敗,再發(fā)一次,結(jié)果就重復(fù)了。。。
a443475601
a443475601
蘋果皮
等級(jí):Blank
#6 得分:0 回復(fù)于: 2013-03-09 20:37:33
引用 4 樓 lanxinglinxi 的回復(fù):
引用 2 樓 a443475601 的回復(fù):引用 1 樓 a443475601 的回復(fù):你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣


你那個(gè)dll 編譯的時(shí)候
#define PRIVATEDLL_EXPORTS了嗎?

我用depends.exe打開后看到的結(jié)果如……

額  弄個(gè).def文件吧,把導(dǎo)出函數(shù)名寫進(jìn)去,
就不用 PRIVATEDLL_API int BinarySearch(int *a,int length,int number);這個(gè)了。
你百度一下 這個(gè)很容易的,應(yīng)該不會(huì)出現(xiàn)你的這個(gè)問題了。
lanxinglinxi
lanxinglinxi
lanxinglinxi
等級(jí):Blank
#7 得分:0 回復(fù)于: 2013-03-09 21:34:36
引用 6 樓 a443475601 的回復(fù):
引用 4 樓 lanxinglinxi 的回復(fù):引用 2 樓 a443475601 的回復(fù):引用 1 樓 a443475601 的回復(fù):你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣


你那個(gè)dll 編譯的時(shí)候
#define PRIVATEDLL_EXPORTS了嗎?
……

謝謝熱心幫忙解答,不過試了后,沒用。。。
lanxinglinxi
lanxinglinxi
lanxinglinxi
等級(jí):Blank
#8 得分:0 回復(fù)于: 2013-03-09 21:39:17
引用 6 樓 a443475601 的回復(fù):
引用 4 樓 lanxinglinxi 的回復(fù):引用 2 樓 a443475601 的回復(fù):引用 1 樓 a443475601 的回復(fù):你用Depends.exe 看看那個(gè)dll的導(dǎo)出函數(shù) 有木有BinarySearch
或者 函數(shù)名是不是跟BinarySearch一樣


你那個(gè)dll 編譯的時(shí)候
#define PRIVATEDLL_EXPORTS了嗎?
……

我搞錯(cuò)了,可以哦,忘記了把重新編譯的dll和lib文件替換了。

請(qǐng)問這是什么原因呢?解釋一下原理?
a443475601
a443475601
蘋果皮
等級(jí):Blank
#9 得分:20 回復(fù)于: 2013-03-09 21:46:41
http://blog.csdn.net/conanlrj/article/details/5797549

這個(gè)鏈接你看一下

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多