Visual Studio 2012 (Win8 Release Preview) で C++/CLI ライブラリを構築して、C# で関数InitializeTouchInjectionおよびInjectTouchInputを使用しようとしています。
クラスを次のように定義します
// MultiTouchWrapper.h
namespace MultiTouchWrapper {
public ref class MultiTouchInjection
{
public:
static bool InitializeMultiTouch(int maxCount);
static bool InjectMultiTouch(int count, float *x, float *y, int *id);
};
}
機能を実装する
//MultiTouchWrapper.cpp
#include "stdafx.h"
#include "MultiTouchWrapper.h"
namespace MultiTouchWrapper{
bool MultiTouchInjection::InitializeMultiTouch(int maxCount){
if(InitializeTouchInjection(maxCount, TOUCH_FEEDBACK_DEFAULT)) return true;
return false;
}
bool MultiTouchInjection::InjectMultiTouch(int count, float *x, float *y, int *id){
POINTER_TOUCH_INFO *contacts = new POINTER_TOUCH_INFO[count];
for(int i=0; i<count; i++){
contacts[i].pointerInfo.pointerType = PT_TOUCH;
contacts[i].pointerInfo.pointerId = id[0];
contacts[i].pointerInfo.ptPixelLocation.y = (LONG)y[0];
contacts[i].pointerInfo.ptPixelLocation.x = (LONG)x[0];
contacts[i].touchFlags = TOUCH_FLAG_NONE;
contacts[i].touchMask = TOUCH_MASK_NONE;
}
if(InjectTouchInput(count, contacts)) return true; //defined like this to avoid a warning about BOOL vs bool.
return false;
}
stdafx.h には、と~<windows.h>
の定義を与えるを含めます。InitializeTouchInjection
InjectTouchInput
<WinUser.h>
私が遭遇している問題は、このライブラリをビルドしようとすると、両方の関数でエラー LNK2028 と LNK2019 が発生することです。
Error 1 error LNK2028: unresolved token (0A00003B) "extern "C" int __stdcall InjectTouchInput(unsigned int,struct tagPOINTER_TOUCH_INFO const *)" (?InjectTouchInput@@$$J18YGHIPBUtagPOINTER_TOUCH_INFO@@@Z) referenced in function "public: static bool __clrcall MultiTouchWrapper::MultiTouchInjection::InjectMultiTouch(int,float *,float *,int *)" (?InjectMultiTouch@MultiTouchInjection@MultiTouchWrapper@@$$FSM_NHPAM0PAH@Z) C:\Users\mediascape\documents\visual studio 2012\Projects\MultiTouchWrapper\MultiTouchWrapper\MultiTouchWrapper.obj MultiTouchWrapper
Error 2 error LNK2028: unresolved token (0A000063) "extern "C" int __stdcall InitializeTouchInjection(unsigned int,unsigned long)" (?InitializeTouchInjection@@$$J18YGHIK@Z) referenced in function "public: static bool __clrcall MultiTouchWrapper::MultiTouchInjection::InitializeMultiTouch(int)" (?InitializeMultiTouch@MultiTouchInjection@MultiTouchWrapper@@$$FSM_NH@Z) C:\Users\mediascape\documents\visual studio 2012\Projects\MultiTouchWrapper\MultiTouchWrapper\MultiTouchWrapper.obj MultiTouchWrapper
Error 3 error LNK2019: unresolved external symbol "extern "C" int __stdcall InitializeTouchInjection(unsigned int,unsigned long)" (?InitializeTouchInjection@@$$J18YGHIK@Z) referenced in function "public: static bool __clrcall MultiTouchWrapper::MultiTouchInjection::InitializeMultiTouch(int)" (?InitializeMultiTouch@MultiTouchInjection@MultiTouchWrapper@@$$FSM_NH@Z) C:\Users\mediascape\documents\visual studio 2012\Projects\MultiTouchWrapper\MultiTouchWrapper\MultiTouchWrapper.obj MultiTouchWrapper
Error 4 error LNK2019: unresolved external symbol "extern "C" int __stdcall InjectTouchInput(unsigned int,struct tagPOINTER_TOUCH_INFO const *)" (?InjectTouchInput@@$$J18YGHIPBUtagPOINTER_TOUCH_INFO@@@Z) referenced in function "public: static bool __clrcall MultiTouchWrapper::MultiTouchInjection::InjectMultiTouch(int,float *,float *,int *)" (?InjectMultiTouch@MultiTouchInjection@MultiTouchWrapper@@$$FSM_NHPAM0PAH@Z) C:\Users\mediascape\documents\visual studio 2012\Projects\MultiTouchWrapper\MultiTouchWrapper\MultiTouchWrapper.obj MultiTouchWrapper
どうすればいいのかわからない。構成プロパティ >> C/C++ >> コマンド ライン メニューに /LD を含めてみました。詳細メニューで呼び出し規約を に変更しようとしまし__cdecl
たが、常に に戻ります__stdcall
。
これらのリンカ エラーを回避するために何をすればよいでしょうか?