我有一个简单的dll由c ++ msvc2010构建。它创建了一个mydll.dll。 (它使用了一些windows本机dll,所以这是一个c包装器。它有功能
exten "c"
{
void myfunc(std::vector<std::string> &names)
)
然后我在mingw \ bin文件夹中使用mingw实用程序pexports.exe和dlltool.exe进行转换。
pexports mydll.dll | sed "s/^_//" > mydll.def
dlltool -U -d mydll.def -l mydll.dll
(覆盖原来的。或者将原来的一个重命名为mydllold.dll。所有dll都在下面的代码:: blocks program的可执行文件夹中。)
然后我有一个代码:: blocks项目myproc。编译器是MinGW的g ++。它链接到属性 - >链接设置中的mydll.dll。
编译没有错误。但是当我运行该程序时 myproc.exe。它有运行时错误:
mydll.dll要么不是设计为在Windows上运行,要么包含错误。
当我使用时:
dlltool -U -d mydll.def -l mydll.a
然后将mydll.dll重命名为mydllold.dll。 并将myproc链接设置为mydll.a,它会收到错误消息:
The program cannot start because mydll.dll is missing.
当我将mydll.a重命名为mydll.dll时,会收到相同的错误消息:
mydll.dll is either not designed to run on windows or it contains an error.
请注意。它没有说mydll.a,而是mydll.dll,甚至链接都是mydll.a。
如果我将mydllold.dll重命名为mydll.dll。错误消息是:
The procedure entry point _myfunc could not be located in the dynamic link library mydll.dll.
头文件mydll.h:
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <vector>
extern "C"
{
MYDLL_API int myfunc(std::vector<std::string>& a);
}
mydll.cpp:
#include <mydll.h>
extern "C"
{
MYDLL_API int myfunc( std::vector<std::string> &a)
{
return 0;
}
}