c++
static double a[1056];
extern "C" __declspec(dllexport) int con1(double* buffer,int maxItem){
char acBuffer[30 + 1];
//Read connection information from INI file in current directory
DWORD dwRet = GetPrivateProfileString((LPCWSTR)"Connection",(LPCWSTR) "Type", (LPCWSTR)"TCP", (LPWSTR)acBuffer, 30, (LPCWSTR)"./ROD4plusViewer.ini");
Connection *pConnection = NULL;
if(strcmp("SERIAL", acBuffer) == 0)
{
//Read serial port parameters and initialize a port instance for serial port usage.
SerialCom *pCon = new SerialCom();
GetPrivateProfileString((LPCWSTR)"Serial", (LPCWSTR)"ComPort", (LPCWSTR)"COM1", (LPWSTR)acBuffer, 30, (LPCWSTR)"./ROD4plusViewer.ini");
pCon->setComPort(acBuffer);
EBaudrate eBaudrate = (EBaudrate) GetPrivateProfileInt((LPCWSTR)"Serial", (LPCWSTR)"Baudrate", 57600, (LPCWSTR)"./ROD4plusViewer.ini");
pCon->setBaudrate(eBaudrate);
pConnection = pCon;
}
else
{
//Read TCP/IP parameters and initialize a port instance for stream socket usage.
TcpSocket *pCon = new TcpSocket();
GetPrivateProfileString((LPCWSTR)"TCP", (LPCWSTR)"IP", (LPCWSTR)"192.168.60.3", (LPWSTR)acBuffer, 30, (LPCWSTR)"./ROD4plusViewer.ini");
pCon->setHostIp(acBuffer);
pCon->setHostPort(GetPrivateProfileInt((LPCWSTR)"TCP", (LPCWSTR)"Port", 9008, (LPCWSTR)"./ROD4plusViewer.ini"));
pConnection = pCon;
}
//connect to sensor
pConnection->connect();
if(!pConnection->isConnected())
{
//connection failed
delete pConnection;
pConnection = NULL;
return -1;
}
//讀取數值
HANDLE hRecvThread = NULL;
GetPrivateProfileString((LPCWSTR)"Connection", (LPCWSTR)"Protocol", (LPCWSTR)"BINARY", (LPWSTR)acBuffer, 30, (LPCWSTR)"./ROD4plusViewer.ini");
if(strcmp("ASCII_POLAR", acBuffer) == 0)
{
return 100;
s_eCoordSystem = COORD_POLAR;
s_pAsciiProtocol = new AsciiRemoteProtocol();
s_pAsciiProtocol->setConnection(pConnection);
//hRecvThread = CreateThread(NULL, 0, recvAsciiThreadProc, NULL, 0, NULL);
recvAsciiThreadProc();
return 100;
}
else if(strcmp("ASCII_CARTESIAN", acBuffer) == 0)
{
s_eCoordSystem = COORD_CARTESIAN;
s_pAsciiProtocol = new AsciiRemoteProtocol();
s_pAsciiProtocol->setConnection(pConnection);
//hRecvThread = CreateThread(NULL, 0, recvAsciiThreadProc, NULL, 0, NULL);
recvAsciiThreadProc();
return 101;
}
else
{
s_pBinaryProtocol = new ROD4BinaryProtocol();
s_pBinaryProtocol->setConnection(pConnection);
//hRecvThread = CreateThread(NULL, 0, recvBinaryThreadProc, NULL, 0, NULL);
recvBinaryThreadProcTS();
if(maxItem < 1056)
return -1;
for(int i = 0;i<1056;i++)
buffer[i] = a[i]; //a[i]在recvBinaryThreadProcTS()中被賦值
}
//最后關閉連接
pConnection->close();
delete pConnection;
pConnection = NULL;
return 5;
}
c#
[DllImport("testdll.dll", EntryPoint = "con1", CallingConvention = CallingConvention.Cdecl)]
public static extern int con1(double[] buffer,int maxItem);
for (int j = 0; j < 10; j++)
{
var buffer = new double[1056];
var ret = test.con1(buffer, buffer.Length);
Console.WriteLine(buffer.Length);
for (int i = 0; i < 1056; i++)
{
Console.WriteLine(buffer[i] + " " + i);
}
}
c#中我就簡單呼叫了這個con1函式,但每次傳的值都是一樣的,請問大家應該怎樣修改呢
uj5u.com熱心網友回復:
你應該先把它轉成C#可用的DLL,然后才能呼叫uj5u.com熱心網友回復:
這個dll已經可以用了,我只是把其中的實作函式列出來了,單次讀值是沒有問題的,多次呼叫讀值總是一樣的數
uj5u.com熱心網友回復:
是有沒有更新其中的引數值,問題已經解決了!!!uj5u.com熱心網友回復:
dll里面的值你沒法更新 , 相當于每次都是重新呼叫的 , 把值存在C#本地試試轉載請註明出處,本文鏈接:https://www.uj5u.com/net/82426.html
標籤:C#
