1

私は Visual C++ の初心者です... 現在取り組んでいるプロジェクトは、VC++ を使用して Digibee から受け入れた入力のログを作成することです。

Digibee に関する情報: http://www.pc-control.co.uk/digibee_info.htmマニュアルには、DLL のロード、関数の呼び出しなどに必要なコードが含まれています。

コードは、いくつかの機能に対して (いくつかの変更を加えて) 正常に動作しているようです....問題は次のとおりです。

  1. Init() - パラメーターを受け入れませんが、コーディングするときは、パラメーターを渡して機能させる必要があります。私は0を渡します

  2. ReadAnalogueInputs() - 4 つのパラメーターを受け入れる必要がありますが、4 つを渡すと、引数が多すぎると表示されます。one..builds を渡すと正常に動作しますが、System.AccessViolation 例外が発生します。

私を助けてください!

    // Header file for use with dgb.dll

     typedef bool   (*Type_InitDgb)();                              
     typedef bool   (*Type_ReadInputs)(int *inputs);
     typedef bool   (*Type_SetOutputs)(int outputs);
     typedef bool   (*Type_ReadAnalogueInputs)(int *aip1, int *aip2, int *aip3, int *aip4);
     typedef bool   (*Type_SetSensitivity)(int sensitivity);

//ソースファイル

    private: System::Void btn_Click(System::Object^  sender, System::EventArgs^  e) {
    HINSTANCE DgbHandle = LoadLibrary(TEXT("dgb.dll"));
             if (DgbHandle==NULL)
                btn->Text="Error";
             else
             {
             btn->Text="Initialized";
             this->progressBar1->Value=100;
             }

             textBox1->Text="Obtaining pointers\n";
                             TypeInitDgb InitDgb;
             TypeSetOutputs SetOutputs;
             TypeReadInputs ReadInputs;
             TypeReadAnalogueInputs ReadAnalogueInputs;
             TypeSetSensitivity SetSensitivity;
             InitDgb =                   (TypeInitDgb)GetProcAddress(HMODULE(DgbHandle),"InitDgb");
             SetOutputs = (TypeSetOutputs)GetProcAddress(HMODULE(DgbHandle),"SetOutputs");
             ReadInputs = (TypeReadInputs)GetProcAddress(HMODULE(DgbHandle),"ReadInputs");
             ReadAnalogueInputs = (TypeReadAnalogueInputs)GetProcAddress(HMODULE(DgbHandle),"ReadAnalogueInputs");
             SetSensitivity = (TypeSetSensitivity)GetProcAddress(HMODULE(DgbHandle),"SetSensitivity");
             this->progressBar2->Value=100;
             textBox1->Text="Pointers obtained";

             status=InitDgb(0);

             if(status==1)
             {
                 textBox1->Text="Digibee initialized";
                 this->progressBar3->Value=100;
                 SetOutputs(LPCTSTR(0x0001));
                 //SetOutputs(LPCSTR(15));
             }
                             int a1,a2,a3,a4;


             ReadAnalogueInputs(LPCTSTR(&a1));  

}

4

0 に答える 0