C++ 在visual studio中使用cygwin编译dll的库函数时出错

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

我试图在wisual studio环境中调用cygwin编译的dll

如果我编译的dll函数没有任何库(只返回任何数字), 它工作正常,但如果我调用例如stdio.h,并且带有写入文件的函数,或者只是printf函数,则无法工作(如果printf函数已退出,代码为1536)

请帮助我如何使用库函数

  • 您不检查
    GetProcAddress()
    的返回代码
  • < L> >如果在C++中编译它,则名称会被不同地修改(这就是为什么代码> GETPro(ActualAddiScript)”/“代码>将返回null BTH”,因为它们是不同的编译器。
    如果您只是使用示例中的基本函数,那么应该将它们声明为
    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();      
    }