全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4362
推到 Plurk!
推到 Facebook!

DDK是否可以用C++來撰寫程式呢?

答題得分者是:暗黑破壞神
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-01 07:30:14 IP:219.70.xxx.xxx 訂閱
您好:
想要請問是否可以用C 的語法來寫DDK的程式呢?
因為我想要在DDK宣告一個類別的東西,
所以才會這樣詢問大家的,
而且不知為何我無法動態配置記憶體空間呢?
例如:

#include

char *Str;
Str = (char*)malloc(10);
每次組譯出來總是有這樣的錯誤訊息,
error LNK2019: unresolved external symbol __imp__malloc referenced in function _DriverEntry@8
所以是否可以告知小弟要如何Link C Library呢?謝謝各位的幫忙啊!


另外請問大家知道如何在DDK使用cpp的程式呢?
編輯記錄
Blueberrug 重新編輯於 2007-06-01 08:55:31, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-01 09:29:31 IP:61.225.xxx.xxx 未訂閱
這分成幾個問題。
1.你為什麼用 DDK? 你知道 DDK 的全名是什麼嗎?
2.除了組合語言,不然我們不叫”組譯”,都叫編譯。
3.Link 出現的錯誤,不是跟你說得很清楚了嗎?你沒去寫 DriverEntry 這個函數。
===================引 用 Blueberrug 文 章===================
而且不知為何我無法動態配置記憶體空間呢?
Str = (char*)malloc(10);

每次組譯出來總是有這樣的錯誤訊息,

error LNK2019: unresolved external symbol __imp__malloc referenced in function _DriverEntry@8

Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-01 11:05:10 IP:59.120.xxx.xxx 訂閱
先謝謝版主的回答:
回答如下:
1 我要用DDK的關係是利用Driver來寫封包,全名為Driver Development Kit,不過我是用ForXP的。
2 關於組譯及編譯,小弟的知識不足,謝謝站長的教導。
3 我有寫DriverEntry這個函式,只是我在這個函式中宣告一各char *Buffer,想要配置記憶體給Buffer就會出現Link的錯誤。函式如下

<textarea class="cpp" rows="10" cols="60" name="code"> NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { char *Buffer; PDEVICE_OBJECT deviceObject = NULL; NTSTATUS status; UNICODE_STRING NtNameString; UNICODE_STRING Win32NameString; KdPrint( ("Hello: Entered the HELLO driver!\n") ); // create counted string version of our device name; RtlInitUnicodeString( &NtNameString, NT_DEVICE_NAME ); // create the device object status = IoCreateDevice( DriverObject, 0, &NtNameString, FILE_DEVICE_UNKNOWN, 0, FALSE, &deviceObject ); if ( NT_SUCCESS(status) ) { // create dispatch points for create/open, close, unload. DriverObject->MajorFunction[IRP_MJ_CREATE] = HelloOpen; DriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloClose; DriverObject->DriverUnload = HelloUnload; KdPrint( ("Hello: just about ready!\n") ); // create counted string version of our win32 device name. RtlInitUnicodeString( &Win32NameString, DOS_DEVICE_NAME ); // create a link from our device name to a name in the win32 namespace. status = IoCreateSymbolicLink( &Win32NameString, &NtNameString ); if (!NT_SUCCESS(status)) { KdPrint( ("HELLO: Couldn't create the symbolic link\n") ); IoDeleteDevice( DriverObject->DeviceObject ); } else { Buffer = (char*)malloc(10); KdPrint( ("HELLO: All initialized!\n") ); } } else { KdPrint( ("HELLO: Couldn't create the device\n") ); } return status; } </textarea>

===================引 用 暗黑破壞神 文 章===================
這分成幾個問題。
1.你為什麼用 DDK? 你知道 DDK 的全名是什麼嗎?
2.除了組合語言,不然我們不叫”組譯”,都叫編譯。
3.Link 出現的錯誤,不是跟你說得很清楚了嗎?你沒去寫 DriverEntry 這個函數。
===================引 用 Blueberrug 文 章===================
而且不知為何我無法動態配置記憶體空間呢?
Str = (char*)malloc(10);
每次組譯出來總是有這樣的錯誤訊息,
error LNK2019: unresolved external symbol __imp__malloc referenced in function _DriverEntry@8

編輯記錄
Blueberrug 重新編輯於 2007-06-01 11:06:43, 註解 無‧
Blueberrug 重新編輯於 2007-06-01 11:07:52, 註解 無‧
Blueberrug 重新編輯於 2007-06-01 11:11:19, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-01 11:21:01 IP:61.225.xxx.xxx 未訂閱
extern "C" NTSTATUS DriverEntry (IN PD.......)
改成這樣吧。

這一句的錯誤跟你的 malloc 無關。
你把你的 malloc 那行去掉,我想這一個 error 也還會在。
所以你似乎沒抓到問題的重心。
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-02 08:42:04 IP:59.120.xxx.xxx 訂閱
您好:
我加了extern "C"之後,
編譯之後還是有錯誤,原文如下:
error C2059 : syntax error : 'string'
而且我也先照著站長的意思先把Buffer註解,
也是有相同的錯誤,反而是我沒有加extern "C"及malloc那行可以編譯成功,
看來我真的不知道問題所在,是我哪各地方沒有看清楚,
才會不知道這樣的錯誤呢?

===================引 用 暗黑破壞神 文 章===================
extern "C" NTSTATUS DriverEntry (IN PD.......)
改成這樣吧。

這一句的錯誤跟你的 malloc 無關。
你把你的 malloc 那行去掉,我想這一個 error 也還會在。
所以你似乎沒抓到問題的重心。
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-02 09:20:02 IP:61.225.xxx.xxx 未訂閱
1.把所有你的 error message 全丟上來吧。一個一個討論要討論到什麼時候?
2.不過全部的問題除了原來那個之外,應該還有一個。
你知道為什麼 printf 會改成 KdPrint 嗎?
想想看,我們再討論。
這跟你的問題是同樣的答案。

===================引 用 Blueberrug 文 章===================
您好:
我加了extern "C"之後,
編譯之後還是有錯誤,原文如下:
error C2059 : syntax error : 'string'
而且我也先照著站長的意思先把Buffer註解,
也是有相同的錯誤,反而是我沒有加extern "C"及malloc那行可以編譯成功,
看來我真的不知道問題所在,是我哪各地方沒有看清楚,
才會不知道這樣的錯誤呢?

===================引 用 暗黑破壞神 文 章===================
extern "C" NTSTATUS DriverEntry (IN PD.......)
改成這樣吧。

這一句的錯誤跟你的 malloc 無關。
你把你的 malloc 那行去掉,我想這一個 error 也還會在。
所以你似乎沒抓到問題的重心。
Blueberrug
一般會員


發表:14
回覆:50
積分:17
註冊:2005-05-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-02 10:14:09 IP:59.120.xxx.xxx 訂閱
您好:
我用KdPrint的原因是因為我目前是使用"Win XP Checked Build Environment"來編譯的,
是為了看我目前的驅動程式執行到哪部份而已,
你說為什麼要將printf改成用KdPrint嗎?
我只知道我是用Checked來編譯的只能用KdPrint
若是要用Free來編譯的話,好像可以用DbgPrint吧!
不知道這樣是否有回答問題呢?感覺好像答非所問似的,對不起。

我的error message目前只有上次所說的而已,
主要我是想要在Driver可以使用cpp的檔案以及C 的類別
但我又不太清楚要怎麼可以在DDK上使用cpp檔案及C 類別,
又看到書上說無法使用c 的new及delete,
所以我就用C的malloc及free函式來配置記體空間,
但不管怎麼呼叫都是錯的,因此才先改成配置一各char *Buffer來配置記憶體看看,
這就是我的問題,因為小弟大多都是在BCB寫程式,才會不知道DDK要怎麼使用,
書上大多都沒有提到malloc及C 的類別使用方式,
才會上網來尋找答案,謝謝您的幫忙啊!

===================引 用 暗黑破壞神 文 章===================
1.把所有你的 error message 全丟上來吧。一個一個討論要討論到什麼時候?
2.不過全部的問題除了原來那個之外,應該還有一個。
你知道為什麼 printf 會改成 KdPrint 嗎?
想想看,我們再討論。
這跟你的問題是同樣的答案。
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-02 13:21:09 IP:61.225.xxx.xxx 未訂閱
你是不是在寫 driver?
你的 Kdprint 是不是用來取代 printf?
為什麼書上說不能用 new?
因為 printf, new, malloc.....都是 user level 的函數。
你要寫 driver 要用那一層的函數。你想想要是你用 malloc 去動到 kernel 在用的記憶體配置。那不是天下大亂了嗎?
所以你該找一下看看 driver 那層,對應的函數是那一個。
就像你不會去用 printf 而得用 Kdprintf 一樣。

===================引 用 Blueberrug 文 章===================
我用KdPrint的原因是因為我目前是使用"Win XP Checked Build Environment"來編譯的,
是為了看我目前的驅動程式執行到哪部份而已,
你說為什麼要將printf改成用KdPrint嗎?
我只知道我是用Checked來編譯的只能用KdPrint
若是要用Free來編譯的話,好像可以用DbgPrint吧!
不知道這樣是否有回答問題呢?感覺好像答非所問似的,對不起。

我的error message目前只有上次所說的而已,
主要我是想要在Driver可以使用cpp的檔案以及C 的類別
但我又不太清楚要怎麼可以在DDK上使用cpp檔案及C 類別,
又看到書上說無法使用c 的new及delete,
所以我就用C的malloc及free函式來配置記體空間,
但不管怎麼呼叫都是錯的,因此才先改成配置一各char *Buffer來配置記憶體看看,
這就是我的問題,因為小弟大多都是在BCB寫程式,才會不知道DDK要怎麼使用,
書上大多都沒有提到malloc及C 的類別使用方式,

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