正文

CAN驱动的调用 不通!:(2006-09-23 17:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/embed/18700.html

分享到:

 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){}

阅读(2683) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册