c#调用c语言Dll的带指针参数的函数,如何转换?
手头只有一个DLL文件和一个函数说明
里面是c语言的方法,有的方法还带指针
现要改成c#调用dll,经过测试,参数是int的,可以直接调用,没有任何问题,但含有char指针的参数如何转换成c#能调用的方法,一直没有头绪。
疑问:1、如下所示char *pFileData1是要加载的波形文件,通过网上查询,说改成ref string pFileData1 就可以了,我把文件的路径赋值给参数pFileData1,测试是通不过的,哪儿出的问题?
2、最复杂的是下面第三个 计算的函数,那些参数都是怎么转换的?我转换的也在下面,不知道是不是这样,因为参数值来源不明确也没法测试。
//像这样的函数调用时没问题的
UsbApi_API int __stdcall Save_WaveInit( int IDN);
//功能:固化波形初始化,在固化波形前必须调用,固定调用。
//参数:IDN:必须为1到9
//返回值:1,初始化成功;-1,初始化失败
// 例程:
/* int IDN=m_combox_deviceID.GetCurSel();
Save_WaveInit(IDN);
*/
//这个就不知道怎么转了
UsbApi_API int __stdcall Load_WaveFile(int IDN, char *pFileData1, char* pFileData2);
//功能:动态加载波形。
//加载的波形文件必须为此动态库中的calculate函数生成的波形文件,否则会提示文件格式不正确(文件版本不对)。
//参数:IDN:必须为1到9; pFileData1:要加载的波形文件1; pFileData2:要加载的波形文件2
//返回值:1,加载成功;-1,加载失败
// 例程:
/* if( Load_WaveFile(IDN,(char*)pFileBuf1,(char*)pFileBuf2)== -1 ) // 文件加载
{
AfxMessageBox("激励源错误、不存在或连接不好,下载波形失败!"); //---DLL内提示
if(pFileBuf1)
::GlobalFree(pFileBuf1);
if(pFileBuf2)
::GlobalFree(pFileBuf2);
return;
}
*/
//波形计算的函数
UsbApi_API int __stdcall calculate(int IDN, char ModUseCnt[10], char ModNum[10][10],
float *pBuff_ID1, float *pBuff_ID2, float *pBuff_ID3, float *pBuff_ID4,
float *pBuff_ID5, float *pBuff_ID6, float *pBuff_ID7, float *pBuff_ID8,
float *pBuff_ID9, float *pBuff_ID10, double *pWaveDat, int *pWaveLen);
//功能:计算波形文件。能根据不同的设备生成不同的波形文件
//参数:
//返回值:1,计算成功;-1,计算失败
我转换的calculate c#可以调用的函数,不知道这样行不行,还请各位老师帮忙看一下。
public char[] ModUseCnt = new char[10];
public char[][] ModNum = new char[10][];
[DllImport("SD530XApi.dll")]
public static extern int calculate(int IDN, char[] ModUseCnt, char[][] ModNum,
ref float pBuff_ID1, ref float pBuff_ID2, ref float pBuff_ID3, ref float pBuff_ID4,
ref float pBuff_ID5, ref float pBuff_ID6, ref float pBuff_ID7, ref float pBuff_ID8,
ref float pBuff_ID9, ref float pBuff_ID10, ref double pWaveDat, ref int pWaveLen);
给点参考意见我也谢天谢地了!