inf和sys文件安装不成功? 采用HKCAN(HKCANDLL.DLL,HKCANDLL.LIB,HKCAN.H)进行VC设计,可能是线程不对!? 代码如下: #include "stdafx.h"#include "resource.h"#include "HKCAN.h" #define MAX_LOADSTRING 100 // Global Variables:HINSTANCE hInst; // current instanceTCHAR szTitle[MAX_LOADSTRING]; // The title bar textTCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text // Foward declarations of functions included in this code module:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); HANDLE hReadEventport[2]; //UINT ReadThreadProc(LPVOIDpParam)//DWORD WINAPI ReadThreadProc(LPVOID lpParameter )UINT ReadThreadProc(LPVOID lpParameter ){ int Temp; do{ DWORD Statuofport=WaitForMultipleObjects(2,hReadEventport,FALSE,INFINITE); switch(Statuofport) {// case WAITOBJECT0: case WAIT_OBJECT_0 : ResetEvent(hReadEventport[0]); Temp=0; break;// case WAITOBJECT0+1: case WAIT_OBJECT_0+1 : ResetEvent(hReadEventport[1]); Temp=1; break; } }while(ReadThreadFlag);//??? return 0L;} int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MYCAN, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); ////////////////////////////////////////////////////////////// HKCANHANDLE m_devicehandle; char BoardType[12]= "HKCAN30\0";// BOOL HKCanOpen(&m_devicehandle,BoardType,3,0); HKCanOpen(&m_devicehandle,BoardType,3,0); hReadEventport[0]=CreateEvent(NULL,TRUE,FALSE,NULL); hReadEventport[1]=CreateEvent(NULL,TRUE,FALSE,NULL); DWORD dwReadThreadID; // hReadFrameThread=CreateThread(NULL,0,(LPTHREADSTARTROUTINE)ReadThreadProc,this,0,&dwReadThreadID); HANDLE hReadFrameThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReadThreadProc,NULL,0,&dwReadThreadID); WORD address=1,bps=0xc0a3,mask=255; BOOL ret0=HKCanInitState(&m_devicehandle,1,bps,address,mask,hReadEventport[0]); BOOL ret1=HKCanInitState(&m_devicehandle,0,bps,address,mask,hReadEventport[1]); ///////////////////////////////////////////////////////////////// // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MYCAN); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam;} //// FUNCTION: MyRegisterClass()//// PURPOSE: Registers the window class.//// COMMENTS://// This function and its usage is only necessary if you want this code// to be compatible with Win32 systems prior to the 'RegisterClassEx'// function that was added to Windows 95. It is important to call this function// so that the application will get 'well formed' small icons associated// with it.//ATOM MyRegisterClass(HINSTANCE hInstance){ WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MYCAN); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_MYCAN; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex);} //// FUNCTION: InitInstance(HANDLE, int)//// PURPOSE: Saves instance handle and creates main window//// COMMENTS://// In this function, we save the instance handle in a global variable and// create and display the main program window.//BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){ HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE;} //// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)//// PURPOSE: Processes messages for the main window.//// WM_COMMAND - process the application menu// WM_PAINT - Paint the main window// WM_DESTROY - post a quit message and return////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);//szHello="Hello World!" switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rt; GetClientRect(hWnd, &rt); DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);//Hello World! EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0;} // Mesage handler for about box.LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){}

评论