我有我的DLL項目找不到這個功能DLLEXPORT
// .h
#pragma once
#include <stdio.h>
extern "C"
{
void __declspec(dllexport) __stdcall sort(int* vect, int size);
}
//.cpp
#include "stdafx.h"
void __declspec(dllexport) __stdcall sort(int* vect, int size)
{
}
我有我的控制檯項目:
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
/* Pointer to the sort function defined in the dll. */
typedef void (__stdcall *p_sort)(int*, int);
int _tmain(int argc, LPTSTR argv[])
{
p_sort sort;
HINSTANCE hGetProcIDDLL = LoadLibrary("dllproj.dll");
if (!hGetProcIDDLL)
{
printf("Could not load the dynamic library\n");
return EXIT_FAILURE;
}
sort = (p_sort)GetProcAddress(hGetProcIDDLL, "sort");
if (!sort)
{
FreeLibrary(hGetProcIDDLL);
printf("Could not locate the function %d\n", GetLastError());
return EXIT_FAILURE;
}
sort(NULL, 0);
return 0;
}
的問題是,我的功能排序colud不能定位,那就是功能GetProcAddress
總是返回NULL
。
爲什麼?我該如何解決它?
編輯:使用__cdecl
(DLL中的項目,而不是__stdcall
)和Dependency Walker
的建議:
我也改變了以下(在我的主),但它仍然無法正常工作。
typedef void (__cdecl *p_sort)(int*, int);
如果您打算使用GetProcAddress,那麼您需要使用DEF文件來刪除裝飾。 –