69,371
社区成员
发帖
与我相关
我的任务
分享
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函数失败!\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);
#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);
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 PRIVATEDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// PRIVATEDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef PRIVATEDLL_EXPORTS
#define PRIVATEDLL_API __declspec(dllexport)
#else
#define PRIVATEDLL_API __declspec(dllimport)
#endif
// 此类是从 PrivateDLL.dll 导出的
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 : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "PrivateDLL.h"
// 这是导出变量的一个示例
PRIVATEDLL_API int nPrivateDLL=0;
// 这是导出函数的一个示例。
PRIVATEDLL_API int fnPrivateDLL(void)
{
return 42;
}
//---------------------------------------------------------------------------------------------------//
//从递增有序数组a中查找number,查找成功返回数字的位置,不成功返回-1;
PRIVATEDLL_API int BinarySearch(int *a,int length,int number)//由于数组作参数传递时,会退化为指针,故此函数的定义加上一个参数,增加适应性;
{
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;
}
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 PrivateDLL.h
CPrivateDLL::CPrivateDLL()
{
return;
}
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 PRIVATEDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// PRIVATEDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef PRIVATEDLL_EXPORTS
#define PRIVATEDLL_API __declspec(dllexport)
#else
#define PRIVATEDLL_API __declspec(dllimport)
#endif
// 此类是从 PrivateDLL.dll 导出的
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 : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "PrivateDLL.h"
// 这是导出变量的一个示例
PRIVATEDLL_API int nPrivateDLL=0;
// 这是导出函数的一个示例。
PRIVATEDLL_API int fnPrivateDLL(void)
{
return 42;
}
//---------------------------------------------------------------------------------------------------//
//从递增有序数组a中查找number,查找成功返回数字的位置,不成功返回-1;
PRIVATEDLL_API int BinarySearch(int *a,int length,int number)//由于数组作参数传递时,会退化为指针,故此函数的定义加上一个参数,增加适应性;
{
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;
}
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 PrivateDLL.h
CPrivateDLL::CPrivateDLL()
{
return;
}