大家好,我是A. Salas。
尽管使用Visual Basic,我在"DLL User Guide for DDC1128EVAL module.pdf"的帮助下成功运行了USB_IO_for VB6.dll来执行WriteFPGARegsC等功能,但我无法在Visual Studio 2013或2015中使用C++来执行它。
我想知道是否有人做过这件事,并可以提供一个例子。 如果有头文件和lib文件要添加到C++项目中,这应该是一个容易的过程,但TI似乎不提供这些文件。 这使得C++的使用更加复杂。
为了详细说明错误,我将提供更多详细信息:
我收到以下错误:
"在DDC1128EVM.exe中0x1.0001万B92 (USB_IO_FOR_VB6.dll)抛出异常:0xc0.0005万:访问冲突读取位置0x0万。 如果存在此异常的处理程序,则可以安全地继续运行该程序。"
我尝试使用Visual Studio社区2013和Visual Studio社区2015时遇到了相同的错误。
要加载DLL,请使用 LoadLibrary(DllPath);
如果成功,则使用 GetProcAddress()在DLL中找到函数的地址;
这也是成功的,因为GetProcAddress()返回的地址与使用此处提到的名为 “Dependency Walker”的第三方应用程序显示的地址匹配。
因此,在成功加载DLL并成功检索要运行的函数的地址后, 我尝试执行该函数,并且得到了DLL地址上的访问冲突错误。
下面是我用来加载DLL的代码示例:
这是代码中的其他部分:
typedef int(*XferINTDataIn_def)(int *USBdev, int *INTData, Long *DataLength);
extern "C" int XferINTDataIn(int *USBdev, int *INTData, Long *DataLength);
以下是抛出异常的位置:
void CDDC1128EVMDlg::OnBnClickedButton2() { CString str; HINSTANCE hResDDC1Message128DLL = NULL; LPCTBox DllPath (_T)(C:\\src\vs2013\libs\\DDC1128\\USB_IO_for_DD1DLL )1128) GetxDataStr128Inf =<DxDDxD,地址=<D1= int dataread[10]={0}; int transfered(0); transfered = xferInt(0),dataread,&DataLength_long; //int __stdcall XferINTDataIn(int *USBdev, int *INTData, Long *DataLength); //int respVal(0); str.Format(_T("tranfered:%d"), transfered); AfxMessageBox (str); } FreeLibrary(hResDDC1128DLL); }
下面是 依赖关系查看器如何显示函数的地址的图像,以及错误和代码的图像。