2016-11-02 19 views
1

私はソーシャル非同期イベントをWindowsのDLLから起動しようとしています。このhereのチュートリアルが下部にあります。GameMaker Studio、Windows DLLからAsyncイベントを作成する

私は理解していないが、次の

あなたの拡張機能がロードされると、このコールバックはすぐに を発射すべきであり、4つの機能へのポインタで渡すことです。

コールバックがdllexportとして定義されているので、GMLから関数(RegisterCallbacks)を呼び出す必要があります。

ここでコールバック関数が

__declspec (dllexport) void RegisterCallbacks(char *arg1, char *arg2, char *arg3, char *arg4) 
{ 
    void (*CreateAsynEventWithDSMapPtr)(int,int) = (void (*)(int,int))(arg1); 
    int(*CreateDsMapPtr)(int _num,...) = (int(*)(int _num,...)) (arg2); 
    CreateAsynEventWithDSMap = CreateAsynEventWithDSMapPtr; 
    CreateDsMap = CreateDsMapPtr; 

    bool (*DsMapAddDoublePtr)(int _index,char *_pKey,double value)= (bool(*)(int,char*,double))(arg3); 
    bool (*DsMapAddStringPtr)(int _index, char *_pKey, char *pVal)= (bool(*)(int,char*,char*))(arg4); 

    DsMapAddDouble = DsMapAddDoublePtr; 
    DsMapAddString = DsMapAddStringPtr; 
} 

だしかし、どのように私はGMLから「CreateAsynEventWithDSMap」へのポインタを渡す必要がありますか?これらの機能はどこで手に入りますか?

答えて

1

古い質問ですが、最近私はこの問題を抱えていましたが、数日間頭を悩ましていたので、私はその回答を投稿すると思っていました。

まず、GMにエクスポートされた他の関数と同様に、DLLのRegisterCallbacks関数は__declspec(dllexport)とextern "C"にする必要があります。

第2に、RegisterCallbacks関数は、C/C++ファイルだけでなく、エクステンション内の他のエクスポートされた関数と同様に、GMでも定義する必要があります。 4つの引数は文字列型として定義する必要があります。 http://i.imgur.com/pppbsWa.png

ゲーム開始時にRegisterCallbackが自動的に起動し、非同期の処理を行うDsMap機能が有効になります。 RegisterCallbacks()を手動で呼び出さないでください。

関連する問題