2016-06-17 1 views
0

私はrFactor用のプラグインをC++で作成しようとしています。プロトコルバッファーを使用してすべてのデータをシリアル化し、ソケットで送信したいと考えています。私が開発した他のプロジェクトではprotobuf succesfulyを試しましたが、この例では何らかのエラーが発生します。dllプログラミングによるプロトコルバッファーC++

エラーC2440 'の初期化': 'のvoid *(__ CDECL *)は(size_t)' は 'void *型(__ fastcall *)は(size_t)' に変換できません InternalsPlugin C:.. \ \グーグルが含まれます\ protobuf \ arena.h 150

なぜ他のプロジェクトで正常に機能しているのか分かりません...アイデアはありますか?

+0

protocは、生成されたクラスをdeclspec(dllimport)またはexportでデコレートしないので、それを使用する各DLL内に完全なprotobuf環境が必要です。これは、DLLをprotobufライブラリに静的にリンクすることを意味します。 (Windows上で異なるコードを生成しない限り)dll間でprotobufメッセージを共有したくない場合もあります。 –

答えて

1

ウィンドウには異なる呼び出し規約があります。関数を呼び出すときには、使用する呼び出し規約を指定する必要があります。あなたの関数ポインタは、__cdecl呼び出し規約(WindowsのCまたはC++のデフォルト)を使うように設定されています。

あなたの問題を解決するには、関数ポインタ宣言に明示的な呼び出し規約宣言を含める必要があります。

詳細については、私はより良いヘルプを提供することはできません。

+0

そのエラーはプロトコルバッファからのヘッダーファイルからのものなので、どうして私はそのヘッダーで何も変更しないとわかりません。ヘッダーはarena.hです。あなたが必要と思うものを提供します。私が言ったように、私は失われています... – Javi

関連する問題