1

Visual Studio でコードをコンパイルしようとしていますが、次のエラーが引き続き発生します。

エラー 4 エラー C3867: 'MindSet::Form1::handleDataValueFunc': 関数呼び出しに引数リストがありません。'&MindSet::Form1::handleDataValueFunc' を使用して、メンバー c:\documents and settings\licap\desktop\mindset\mindset\mindset\Form1.h へのポインターを作成します 122 1 MindSet

これは私のコードです

#pragma endregion
void handleDataValueFunc(unsigned char extendedCodeLevel, unsigned char code,
    unsigned char valueLength, const unsigned char *value, void *customData)
{
    FILE *arq1;
    FILE *arq2;
    FILE *arq3;
        arq1 = fopen("raw.txt","a");
        arq2 = fopen("atencao.txt","a");
        arq3 = fopen("meditacao.txt","a");

    if (extendedCodeLevel == 0 && code == RAW_WAVE_CODE)
    {
        short rawValue = ((value[0] << 8) & 0xff00) | (0x00ff & value[1]);
        printf("%d\n", rawValue);
        fprintf(arq1,"%d\n",rawValue);
    }
    if (extendedCodeLevel == 0 && code == ATTENTION_LEVEL_CODE)
        {
            short attentionValue = (value[0] & 0xFF);
            printf("%d\n", attentionValue);
            fprintf(arq2,"%d\n",attentionValue);
        }
    if (extendedCodeLevel == 0 && code == MEDITATION_LEVEL_CODE)
        {
            short meditationValue = (value[0] & 0xFF);
            printf("%d\n", meditationValue);
            fprintf(arq3,"%d\n",meditationValue);
        }
    fclose(arq1);
    fclose(arq2);
    fclose(arq3);
}
private: System::Void IniciarCaptura_Click(System::Object^  sender, System::EventArgs^  e) {

    SerialPort* port = new SerialPortW32();

    if (port->open())
    {
        /* Initialize ThinkGear stream parser */
        ThinkGearStreamParser parser;
        THINKGEAR_initParser(&parser, PARSER_TYPE_PACKETS, handleDataValueFunc, NULL);

        unsigned char byteRead;
        for (int i = 0; i < 100000; i++)
        {
            if (port->read(&byteRead, 1) == 1)
            {
                THINKGEAR_parseByte(&parser, byteRead);
                fflush(stdout);
            }
            else
            {
                //cerr << "Erro na leitura da porta" << endl;
                break;
            }
        }

        port->close();
    }
    else
    {
        //cout << port->getErrorMessage() << endl;
    }
    delete port;
    //return 0;
    }
};

}

「handleDataValueFunc」の前に「&」を追加しようとしましたが、別のエラー メッセージしか返されません。誰でも助けることができますか?

4

1 に答える 1

0

http://msdn.microsoft.com/en-us/library/481fa11f.aspxgcroot 参照してください。

struct nativeMindSetFormHandle
{
    nativeMindSetFormHandle(MindSet::Form1 ^ h) : handle(h) {}
    gcroot<MindSet::Form1 ^> handle;
};

static void handleDataValueFuncProxy(unsigned char extendedCodeLevel,
    unsigned char code, unsigned char valueLength, const unsigned char *value,
    void *customData)
{
    static_cast<nativeMindSetFormHandle *>(customData)->handle->handleDataValueFunc(extendedCodeLevel, code, valueLength, value, NULL);
}

そして、次を含めるように更新IniciarCaptura_Clickします。

nativeMindSetFromHandle * nativeHandle = new nativeMindSetFormHandle(this);
THINKGEAR_initParser(&parser, PARSER_TYPE_PACKETS, handleDataValueFuncProxy, nativeHandle);

そして、終わったら忘れないでくださいdelete nativeHandle

于 2012-09-13T13:56:05.637 に答える