我用cvi做一个小程序,需要用到并口,公司以前的程序是VC++的,里面的dll调用方式有两种,头文件如下:
#ifndef WINIO_H
#define WINIO_H
#include "windef.h"
//#include "winnt.h"
#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif
extern "C"
{
WINIO_API bool _stdcall InitializeWinIo();
WINIO_API void _stdcall ShutdownWinIo();
WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
WINIO_API bool _stdcall RemoveWinIoDriver();
}
extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;
bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();
#endif
我加入文件编译没通过!!
我可以在cvi中直接调用么?
有什么要注意的么?
已解决! 转到解答。
看了你的问题,你将winio的头文件贴上了.如果要使用他可以使用VC制作dll来调用winio.dll 或 更改winio.h头文件 或 添加window.h等头文件.来实现.
我已经有WinIo.dll和相应的WinIo.lib,而且头文件也写好了,上层函数的调用也是这里面的函数,我在主程序里调用InitializeWinIo(); ShutdownWinIo();结果出错,Missing prototype. if(InitializeWinIo())。
我把头文件修改过:
#ifndef WINIO_H
#define WINIO_H
#include "windef.h"
//#include "winnt.h"
#define bool BOOL
#define false 0
#define true 1
#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif
bool _stdcall InitializeWinIo();
void _stdcall ShutdownWinIo();
_stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded );
bool _stdcall RemoveWinIoDriver();
#endif
可还是一样的错误,
Missing prototype.
难道不可以直接调用么?是不是那里设置的不对?
Missing prototype. if(InitializeWinIo()) 这个错误标识程序无法找到或调用到InitializeWinIo()这个函数.
------------------------------------------------------------------------------- 这个我知道,我以前也在cvi里吊用过dll,只要有相应的lib文件和*.h文件函数就可以正确调用,但是这个dll我已经在主文件里加入了头文件,而且也作了头文件函数声明 ,但是还是有上面的错误,我就是这里不理解,函数在VC++里调用没问题的,在cvi里应该可以正常调用的,所以我认为是环境的设置哪里有问题,所以问问有没有人做过这样的例子,帮忙分析一下。 |