0
런타임에서 DLL 파일을로드하고 거기에서 함수를 호출하는 방법을 배우고 있습니다. 처음에는 수학 함수 cosf
을 선택하기로 결정했습니다. 어떤 검색을 한 후에 나는 모든 수학 함수가 msvcr100.dll
에서 발견된다는 것을 배웠다. 그래서 여기 내가 작성한 코드는 다음과 같습니다GetProcAddress를 사용하여 msvcr100.dll에서 cosf를 찾을 수 없습니다.
#include <stdio.h>
#include <Windows.h>
FARPROC getEntry(HMODULE &m, const char* name) {
FARPROC p=GetProcAddress(m, name);
if (!p) {
printf("Error: Entry %s not found\n", name);
printf("Error code: %d\n",GetLastError());
exit(1);
} else
printf("Entry %s loaded\n", name);
return p;
}
int main() {
HMODULE msvcr = LoadLibraryA("msvcr100.dll");
if (!msvcr)
printf("File msvcr100.dll not found\n");
else
printf("msvcr100.dll loaded\n");
FARPROC fun = getEntry(msvcr, "cos");
FARPROC fun2 = getEntry(msvcr, "cosf");
FreeLibrary(msvcr);
return 0;
}
내가 그것을 실행하면, 나는 다음과 같은 출력을 얻을 :
msvcr100.dll loaded
Entry cos loaded
Error: Entry cosf not found
Error code: 127
이유는 무엇입니까?
- 오류 코드
ERROR_PROC_NOT_FOUND
127 스탠드 - 지정된 프로 시저를 찾을 수 없습니다. - 종속성 워커에 따르면 MSVCR100.DLL에는
cosf
함수가 있습니다. 서수 1349, 진입 점 0xC2750. - 함수 이름이 맹 글링되지 않는 것 같습니다.
- 모두 '왜냐하면'와 '사인, 코사인은'런타임 라이브러리 함수 참조에 나열되어 있습니다 http://msdn.microsoft.com/en-us/library/ydcbat90.aspx
나는 무엇을 놓치고? cosf
에 다른 dll을 사용해야하는 경우 - 어떤 DLL입니까? cos
은 두 배가 걸립니다. 나는 수레를 필요로하는 함수가 필요합니다.
감사합니다. <math.h>
헤더 파일에서
Ow ... 헤더 파일의 내용을 확인하지 않았습니다. 그렇다면 왜 Dependency Walker가이 기능을 사용합니까? 그것은 DLL에 전혀 존재해서는 안됩니다 ... 아니면 ...? – CygnusX1
Dumpbin.exe/exports, 나는 그것을 볼 수 없다. ___libm_sse2_cosf 내보내기가 있는데 그 기능이 무엇인지 알지 못합니다. –
실제로, 나는 Dumpbin을 시도하지 않았고, Dependency Walker가 똑같은 것을 보여줄 것이라고 생각했습니다. 그러나 지금 내가 시도했을 때, 나는 그 둘 사이에 중요한 차이가 있음을 알았다. 고맙습니다! – CygnusX1