4

私はmingw-w64を使用しています。私はstrsafe.h次の警告を含めて取得しています:

warning: inline function 'HRESULT StringCchPrintfA(STRSAFE_LPSTR, size_t, STRS
AFE_LPCSTR, ...)' used but never defined [enabled by default]

私が使用した唯一のフラグは-Wall -DDEBUG -g. 同じヘッダーでインライン関数を定義する必要があることはわかっていますが、ヘッダーでstrsafe.hそれを明確に確認できるStringCchPrintfAため、このエラーが発生する理由がわかりません。また、ヘッダーを自分で見たい場合は、ここに strsafe.h へのリンクがあります

編集:

次のスニペットをオンラインで見つけました (誰かがより多くの情報を提供できる場合は、コメントで何を言おうとしているのか教えてください):

// Work around lack of strsafe library in mingw-w64, do let their
// strsafe.h provide inlines of StringCchVPrintfA etc, avoid linking
// errors in a debug build.
#ifdef __CRT__NO_INLINE
#undef __CRT__NO_INLINE
#define DID_UNDEFINE__CRT__NO_INLINE
#endif
extern "C" {

#endif

#include <strsafe.h>

#ifdef __MINGW32__
}

#ifdef DID_UNDEFINE__CRT__NO_INLINE
#define __CRT__NO_INLINE
#endif
#endif
4

1 に答える 1

1

コメントは、strsafeライブラリがあるはずですが、そこにはないことを示しています。__CRT__NO_INLINE定義は、ヘッダーからインライン化されたライブラリを使用する代わりに、関数を提供するためのコンパイル済みライブラリがどこかにあることを意味する必要があります。

したがって、そのライブラリが存在しない場合(ただし、存在する必要があると思われる場合)は、インライン関数を使用できるようにします。

ただし、これはリンクエラーを修正するためです。コードをコンパイルするときにリンクエラーが発生しますか?それとも警告が表示されますか?警告が表示されるだけの場合は、実際にstrsafeライブラリを持っていることを意味します。メッセージを削除し、コンパイルされたバージョンの関数を使用する方法がないことは完全にもっともらしいです。

于 2011-12-15T02:13:07.497 に答える