我想轉換一個C#代碼,它與DLL一起工作到C++,所以我的C++應用程序可以使用DLL。所以我在這裏開發一個C++/CLI應用C++/cli:無法轉換參數1
請看看下面的C#代碼
private void SendUSBData(byte[] Data)
{
if (this.USB.SpecifiedDevice != null)
{
this.USB.SpecifiedDevice.SendData(Data);
}
}
SendData()
是在DLL中可用的方法。以下是它在DLL中定義
public void SendData(byte[] data);
好了,現在在我的C++代碼,我試圖轉換C#這樣的代碼
void MissileLauncher::sendUSBData(unsigned char *data)
{
if(usb.SpecifiedDevice!=nullptr)
{
//System::Byte
usb.SpecifiedDevice->SendData(&data);
}
}
我收到以下錯誤,當我運行這段代碼
1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1> MissileLauncher.cpp
1>MissileLauncher.cpp(200): error C2664: 'UsbLibrary::SpecifiedDevice::SendData' : cannot convert parameter 1 from 'unsigned char **' to 'cli::array<Type,dimension> ^'
1> with
1> [
1> Type=unsigned char,
1> dimension=1
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我嘗試以下以及
void MissileLauncher::sendUSBData(array<System::Byte>^data)
{
if(usb.SpecifiedDevice!=nullptr)
{
//System::Byte
usb.SpecifiedDevice->SendData(&data);
}
}
它給了我下面的錯誤
1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1> MissileLauncher.cpp
1>MissileLauncher.cpp(125): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
1>MissileLauncher.cpp(159): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
1>MissileLauncher.cpp(164): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
1>MissileLauncher.cpp(166): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
1>MissileLauncher.cpp(186): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
1>MissileLauncher.cpp(188): error C2664: 'MissileLauncher::sendUSBData' : cannot convert parameter 1 from 'unsigned char *' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
1>MissileLauncher.cpp(200): error C2664: 'UsbLibrary::SpecifiedDevice::SendData' : cannot convert parameter 1 from 'cli::array<Type> ^*' to 'cli::array<Type> ^'
1> with
1> [
1> Type=unsigned char
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我怎樣才能擺脫呢?有任何想法嗎?
更新作爲一個答案提出
,嘗試下面的代碼
void MissileLauncher::sendUSBData(unsigned char *data)
{
if(usb.SpecifiedDevice!=nullptr)
{
int N = 10;
cli::array<char>^ newData = gcnew cli::array<char>(N);
for (int i = 0; i < N; ++i)
newData[i] = data[i];
//System::Byte
usb.SpecifiedDevice->SendData(newData);
}
}
現在,它給我下面的錯誤
1>------ Build started: Project: CallToCSharp, Configuration: Debug Win32 ------
1> MissileLauncher.cpp
1>MissileLauncher.cpp(206): error C2664: 'UsbLibrary::SpecifiedDevice::SendData' : cannot convert parameter 1 from 'cli::array<Type> ^' to 'cli::array<Type,dimension> ^'
1> with
1> [
1> Type=char
1> ]
1> and
1> [
1> Type=unsigned char,
1> dimension=1
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
說實話,我真的不知道是否按照建議正確編碼了這段代碼。如果不是,那麼請糾正我。請幫忙!
不會啓動編輯戰爭,但沒有任何理由來添加標籤回稱號。不需要重複你已經有的東西。 – mwerschy 2013-05-11 19:41:00