線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:8690
推到 Plurk!
推到 Facebook!

有關WinIO的使用.

尚未結案
syj13579
一般會員


發表:2
回覆:2
積分:0
註冊:2005-01-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-08 18:58:21 IP:211.21.xxx.xxx 未訂閱
各位先進: 可否解釋如何使用WinIO,如以下STEP的操作,我看不懂. Using WinIo in a C Builder application In order to use WinIo in a C Builder application, you should take the following steps: 1.Place winio.dll, winio.vxd and winio.sys in the directory where your application's executable file resides. 2.Create a winio.lib file by running the IMPLIB utility that is bundled with C Builder. 3.Add the generated winio.lib to your project file. 4.Remove the WINIO_API constant from the function declarations in winio.h. 5.Add the "#include "winio.h" statement to your source file. Call InitializeWinIo. 6.Call the library's functions to access I/O ports and physical memory. 7.Call ShutdownWinIo.
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-09 09:14:07 IP:61.66.xxx.xxx 未訂閱
這好像沒有什麼特殊的動作要做,幾乎是單純的英翻中 除非你不會用BCB,要不然你用一下翻譯軟體應該就都可以查出來了 (應該也沒什麼特別的字,也不需要翻譯軟體了) 如果真的翻不出這些步驟,MSDN一定也看不懂 走程式這條路,我想應該會非常累吧 加油吧,學會看懂文件和學會程式語言一樣重要
syj13579
一般會員


發表:2
回覆:2
積分:0
註冊:2005-01-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-10 22:34:23 IP:220.141.xxx.xxx 未訂閱
我想我的問題是,就是對WinIO的使用.我下載了一個Sourse Code如下: 這是之前別人Post 的Code有關用WinIO讀取硬體資訊,整個程式可以執行.我拿下來改可以順利的執行,並且用Parallel port monitor可看到我Parallel port的變化.但是問題是這是重別人的code去改的,於是我想重頭宣告起,就能使用....該如何做?於是才會winio的使用步驟!因為實在看不懂.    #include  #pragma hdrstop #include "Unit1.h" #include "Unit2.h" #include "WinIO.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #pragma link "WinIo_bc.lib" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { bWinIoInitOK = InitializeWinIo(); if(!bWinIoInitOK) { Application->MessageBox("不能裝載 WinIO 程式!","錯誤資訊",MB_OK|MB_ICONSTOP); Application->Terminate(); } else Edit1->Text ="WinIO Success"; InitPortFuncs(); } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1() { if(bWinIoInitOK) ShutdownWinIo(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { WORD wPortAddr; DWORD dwPortVal; BYTE bSize; SetPortVal(0x378, 0x00, 4); // DWORD dwOldProcessP = GetPriorityClass(GetCurrentProcess()); // DWORD dwOldThreadP = GetThreadPriority(GetCurrentThread()); // SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); // SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); // AnsiString idename[2] = {"IDE0","IDE1"}, diskname[2] = {"主盤","從盤"}; //unsigned short params[256]; char Str[256]; // for(int pn=0; pn<2; pn ) //primary or secondary // for(int dn=0; dn<2; dn ) //master or slave // { // Memo1->Lines->Add(idename[pn] " " diskname[dn] ":"); // if(ReadHddParams(params,pn,dn)) // { // WordToStr(Str,params 27,20); Memo1->Lines->Add("型 號: " AnsiString(Str)); // WordToStr(Str,params 10,10); Memo1->Lines->Add("序 列 號: " AnsiString(Str)); // WordToStr(Str,params 23, 4); Memo1->Lines->Add("固件版本: " AnsiString(Str)); // unsigned long LbaCap = *(unsigned long *)(¶ms[60])/2048; // unsigned long NomCap = ((unsigned long)(params[1])*(params[3])*(params[6]))/2048; // Memo1->Lines->Add("容 量: " AnsiString().sprintf("%lu Mb",LbaCap>NomCap?LbaCap:NomCap)); // Memo1->Lines->Add(AnsiString().sprintf("柱 面 數: %u", params[1])); // Memo1->Lines->Add(AnsiString().sprintf("磁 頭 數: %u", params[3])); // Memo1->Lines->Add(AnsiString().sprintf("扇 區 數: %u", params[6])); // bool DMA = params[49]&0x0100; //D8:是否支援DMA // bool LBA = params[49]&0x0200; //D9:是否支援LBA // Memo1->Lines->Add(AnsiString().sprintf("緩存容量: %u kb", params[21]>>1)); // Memo1->Lines->Add(AnsiString().sprintf("ECC 位元組: %u bytes", params[22])); // Memo1->Lines->Add(AnsiString().sprintf("LBA 支援: %s", LBA?"是":"否")); // Memo1->Lines->Add(AnsiString().sprintf("DMA 支援: %s", DMA?"是":"否")); // } // else // { // Memo1->Lines->Add("沒找到硬碟"); // } // Memo1->Lines->Add(""); // } // SetThreadPriority(GetCurrentThread(), dwOldThreadP); // SetPriorityClass(GetCurrentProcess(), dwOldProcessP); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { // HANDLE hPhyMem; //char *lpInfo = (char far *)0xf0000L; //下面的語句讓 0xf0000 位址的 65536 個位元組可直接讀寫 // char *lpInfo = MapPhysToLin((char*)0xf0000,65536,&hPhyMem); // Memo1->Lines->Add(lpInfo 0xe061); //主板BIOS名稱 0xFE061 // Memo1->Lines->Add(lpInfo 0xe091); //主板BIOS版權 0xFE091 // Memo1->Lines->Add(lpInfo 0xfff5); //主板BIOS日期 0xFFFF5 // Memo1->Lines->Add(lpInfo 0xec71); //主板BIOS序列號 0xFEC71 // UnmapPhysicalMemory(hPhyMem, lpInfo); }
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-11 08:51:05 IP:61.66.xxx.xxx 未訂閱
1.Place winio.dll, winio.vxd and winio.sys in the directory where your application's executable file resides. 將上述的檔案跟你的執行檔放同一個目錄下,以便執行時呼叫 2.Create a winio.lib file by running the IMPLIB utility that is bundled with C Builder. 原本的winio.lib可能是VC做出來的,為了要讓BCB能夠使用,所以需用IMPLIB先轉檔 3.Add the generated winio.lib to your project file. 將轉換後的winio.lib加入你的project 4.Remove the WINIO_API constant from the function declarations in winio.h. 到winio.h中將WINIO_API的宣告移除 5.Add the "#include "winio.h" statement to your source file. #include "winio.h" Call InitializeWinIo. 在你開始在做I/O前先呼叫InitializeWinIo。建議放在TForm1::TForm1以便一開始就呼叫 且只做一次 6.Call the library's functions to access I/O ports and physical memory. 像以前在DOS一樣,直接對某一個I/O Port作讀寫 7.Call ShutdownWinIo. 結束後,呼叫ShutdownWinIo。建議放在TForm1::~TForm1以便結束時自動呼叫
zolt
一般會員


發表:20
回覆:9
積分:5
註冊:2008-07-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-15 22:13:02 IP:123.193.xxx.xxx 訂閱
各位好,

關於這支程式有一個問題想請問各位
當我在裝置管理員裡將IDE的DMA改成PIO後
為何執行這支程式時仍會顯示支援DMA呢?
有其他能正確判斷DMA是否被disabled的方法嗎?

謝謝大家的幫忙!
系統時間:2024-04-25 21:45:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!