1

.dllVisual C++ でファイルを作成しました。
2 つの引数を取り、シリアル ポート経由でデータを送信する関数が含まれています。次に、これ.dllをアプリケーションに含めて、これらの関数を呼び出したいと思いました。しかし、これらの関数を呼び出すことができません。親切に助けてください。

ここに私のヘッダーファイルがあります.dll

 namespace positioncontrol

{  
using namespace std;
using namespace System;
using namespace System::IO::Ports;

  public ref class control

    {   
    static int rotate(char a, String^ b);

    };
}

そして、これが.cpp私のものです.dll

   #include "goniometer.h"    

    namespace positioncontrol
    { 

   void control::rotate(char a, String^ b)
    {        SerialPort^ serialPort = gcnew SerialPort(L"COM5",9600,Parity::None,1,StopBits::One);          
             int inp_rotation;
             array<unsigned char>^ inp_c = gcnew array<unsigned char>(2);   
             String^ inp_string;                                             
             inp_c[0] = a;
             inp_string= b;                                     
             inp_rotation=Int32::Parse(inp_string);                         
             inp_c[1] = (unsigned char)inp_rotation;
             serialPort->Write(inp_c,0,2);                                         
        }
     }

この .dll をデスクトップ アプリケーションで使用しています。ヘッダーファイルをインクルードしました

#ifndef goniometer_h
#define goniometer_h
#include "goniometer.h"
#endif

インクルード ディレクトリのパスを追加し、参照として .dll を追加しました。今、クリックイベントのために.dllで定義された関数を使用しています

private: System::Void button9_Click(System::Object^  sender, System::EventArgs^  e) {

              char dir;       
              dir = 0x42;
              String^ inp_string;                                                
              inp_string=enter_degree->Text; 
              positioncontrol::control::rotate(dir,inp_string);                                                      

         }

デスクトップアプリケーションをビルドすると、次のエラーが発生します

1>C:\Users\DELL\Desktop\Final\Motor_Dual_API\Debug\goniometer.h(10): error C2011: 'positioncontrol::control' : 'class' type redefinition
1>          c:\users\dell\desktop\final\vc++dll\debug\goniometer.dll : see declaration of 'positioncontrol::control'
1>c:\users\dell\desktop\final\motor_dual_api\motor_next\Form1.h(530): error C2027: use of undefined type 'positioncontrol::control'
1>          c:\users\dell\desktop\final\vc++dll\debug\goniometer.dll : see declaration of 'positioncontrol::control'
1>c:\users\dell\desktop\final\motor_dual_api\motor_next\Form1.h(530): error C3861: 'rotate': identifier not found
1>c:\users\dell\desktop\final\motor_dual_api\motor_next\Form1.h(540): error C2027: use of undefined type 'positioncontrol::control'
1>          c:\users\dell\desktop\final\vc++dll\debug\goniometer.dll : see declaration of 'positioncontrol::control'
1>c:\users\dell\desktop\final\motor_dual_api\motor_next\Form1.h(540): error C3861: 'rotate': identifier not found

エラーを理解するのを手伝ってください。感謝と敬意

4

2 に答える 2

0

C++ では、名前空間の区切り記号は::ではなく.. usingあなたの声明を確認してください。

于 2012-10-25T06:25:15.110 に答える
0

あなたのコードは を定義していませんserialPort。定義をグローバル名前空間、名前空間、positionControlまたは関数の自動変数として追加します

セマンティックの観点からserialPortは、ポインタです。したがって、serialPort が指すオブジェクトのインスタンスも作成する必要があります。

于 2012-10-25T11:25:02.173 に答える