uisng msvc dll来自mingw by code :: blocks

时间:2018-04-09 23:26:10

标签: c++ visual-c++ dll mingw

我有一个简单的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;
    }
}

0 个答案:

没有答案