这感觉像是一个菜鸟问题,所以如果它是一个骗子,请指出我正确的位置:)
我尝试将用 C 编写的 DLL 包含到 C++ 程序中。它没有用;gcc 说
test.cpp: xxx: 错误:函数参数太多。
这是一个最小的工作示例:
DLL 函数的包装器:
/* myWrapper.h */
#ifndef _MYWRAPPER_H
#define _MYWRAPPER_H
#include <windows.h>
#ifdef __cplusplus
extern "C" {
#endif
extern FARPROC EXPORTED_functionNameP;
int GetDLLpointers();
#ifdef __cplusplus
}
#endif
#endif
其实施:
/* myWrapper.c */
#include <windows.h>
#include "myHeader.h"
#ifdef __cplusplus
extern "C" {
#endif
HINSTANCE drvsHANDLE;
extern FARPROC EXPORTED_functionNameP;
int GetDLLpointers()
{
static int result;
drvsHANDLE = LoadLibrary("myLibrary.dll");
if (drvsHANDLE == NULL) return (result=0);
EXPORTED_functionNameP = GetProcAddress(
drvsHANDLE, "originalFunctionName");
if (EXPORTED_functionNameP == NULL) return (result = 0);
return (result = 1);
}
#ifdef __cplusplus
}
#endif
当然,我自己没有写过这些,也没有写过库,最好它们都应该保持原样。但是,我确实添加了这些extern "C"
行。
然后,我的主文件:
// my Main
#include <windows.h>
#include "myHeader.h"
int main(int argc, char **argv)
{
int arg = 1;
EXPORTED_functionNameP(arg);
return 0;
}
构建命令:
gcc -I. -c -o myHeader.o myHeader.c -L. -lmyLibrary
g++ -I. -o main.exe myMain.cpp myHeader.o -L. -lmyLibrary
如果我将 my 重写main.cpp
为有效的 C 并使用gcc
而不是g++
.
我尝试更改extern "C"
为extern "C++"
无济于事,我尝试了所有排列或gcc
对于g++
两个构建命令,什么都没有。
我知道这与名称修改有关,但我认为gcc
当您包含这些行时会处理好extern "C"
...有人可以解释一下我在这里缺少什么吗?
以防万一——
Windows XP Pro(稍后将是 Win7)
(MinGW) gcc 4.6.2