C++ 在visual studio中使用cygwin编译dll的库函数时出错
我试图在wisual studio环境中调用cygwin编译的dll 如果我编译的dll函数没有任何库(只返回任何数字), 它工作正常,但如果我调用例如stdio.h,并且带有写入文件的函数,或者只是printf函数,则无法工作(如果printf函数已退出,代码为1536) 请帮助我如何使用库函数C++ 在visual studio中使用cygwin编译dll的库函数时出错,c++,c,visual-studio,cygwin,C++,C,Visual Studio,Cygwin,我试图在wisual studio环境中调用cygwin编译的dll 如果我编译的dll函数没有任何库(只返回任何数字), 它工作正常,但如果我调用例如stdio.h,并且带有写入文件的函数,或者只是printf函数,则无法工作(如果printf函数已退出,代码为1536) 请帮助我如何使用库函数 您不检查GetProcAddress()的返回代码 < L> >如果在C++中编译它,则名称会被不同地修改(这就是为什么代码> GETPro(ActualAddiScript)”/“代码>将返回nul
GetProcAddress()
的返回代码如果您只是使用示例中的基本函数,那么应该将它们声明为
extern“C”
,这样它们就不会被破坏。另外,请确保编译DLL时正确使用了\u declspec export
语句。函数myfunc
否…\uuuuu能否详细说明一下?请在继续之前阅读:实际上它确实使Newlogtst.txt
文件为空,并以此异常退出-“在0x611333a(cygwin1.DLL)抛出异常”在Cygwindltest.exe中:0xC0000005:访问冲突读取位置0x004E0059。如果存在此异常的处理程序,则该程序可以安全地继续。“cup:谢谢,提供链接,但我认为这不会有帮助,我不想在visual studio中更改包含头路径,我只想加载dll,调用函数..没有函数名没有损坏,我正在调试GetprocAddress不为NULL。它甚至使“Newlogtst.txt”成为空文件…你读过这个吗?看起来你没有正确初始化cygwin CRT。显然cygwin_dll_init是不够的。谢谢,我想,我应该阅读如何正确初始化cygwin CRT。但我现在仍然不知道,我怎么能毫无例外地调用第二个函数呢?从我通过谷歌发现的情况来看,这可能是不可能的,或者很难不值得这么麻烦。如果CRT正确初始化,我希望myfunc
不会再崩溃。
#include <stdio.h>
int myfunc()
{
char* strtxt = "test";
FILE *hF = fopen( "Newlogtst.txt", "w" );
if(hF == 0)
{
return 5;
}
fputs( (const char*)strtxt, hF );
fclose(hF);
return 1;
}
int tst()
{
return 25;
}
#include <windows.h>
typedef int (*PFN_HELLO)();
typedef void (*PFN_CYGWIN_DLL_INIT)();
int main()
{
PFN_HELLO func;
HMODULE hLib, h = LoadLibrary(TEXT("C:\\cygwin\\bin\\cygwin1.dll"));
PFN_CYGWIN_DLL_INIT init = (PFN_CYGWIN_DLL_INIT) GetProcAddress(h,"cygwin_dll_init");
init();
hLib = LoadLibrary (TEXT("C:\\Cygwin\\home\\azatyan\\TestDynamicLink\\mydll.dll"));
func = (PFN_HELLO) GetProcAddress (hLib, "myfunc");
return func();
}