2014-09-23 65 views

回答

0

是的,标准库已经改变了,FTDI似乎并不关心 - 至少不像CDM2.12.18驱动版本。

该问题在this question的答案中有所描述。

void __cdecl Padding(int)功能从devcon.objftd2xx.lib是罪魁祸首。它参考作为宏给出的stdin,stdoutstderr之一。这些宏的内容改变了。

因为我们真的不指望从FTDI库中的任何I/O,我们不妨提供可能的最简单的实现:

FILE* __cdecl _imp____iob_func() { return 0; } 

如果你想有一个版本做什么它应该做的:

FILE* __cdecl _imp____iob_func() 
{ 
    struct _iobuf_VS2012 { // ...\Microsoft Visual Studio 11.0\VC\include\stdio.h #56 
     char *_ptr; 
     int _cnt; 
     char *_base; 
     int _flag; 
     int _file; 
     int _charbuf; 
     int _bufsiz; 
     char *_tmpfname; }; 
    // VS2015 has FILE = struct {void* _Placeholder} 

    static struct _iobuf_VS2012 bufs[3]; 
    static char initialized = 0; 

    if (!initialized) { 
     bufs[0]._ptr = stdin->_Placeholder; 
     bufs[1]._ptr = stdout->_Placeholder; 
     bufs[2]._ptr = stderr->_Placeholder; 
     initialized = 1; 
    } 

    return (FILE*)&bufs; 
} 
相关问题