mong mọi người giúp đở gấp
sdfasdfa sfsadf
Đã được chỉnh sửa lần cuối bởi nguyenk2089@yahoo.com : 25-08-2008 lúc 03:01 PM.
mong mọi người giúp đở gấp
Hàm lstrlenA đã được khai báo sẵn trong windows.h, bạn đâu cần phải làm cách này. Mà nếu như bạn muốn nạp thư viện động thì làm vầy cũng không đúng. Hàm này có cú pháp int _stdcall lstrlenA(LPCTSTR lpString), tham số truyền vào là một con trỏ trỏ đến chuỗi chứ đâu phải một con số nguyên. Cứ coi như theo ý bạn là biến t1 là con trỏ kiểu chuỗi đi nữa thì cũng có lỗi bởi vì t1 tự nhiên lại trỏ đến một vùng nhớ có địa chỉ là 3434 ( đây là vùng nhớ không truy cập được ở mức user mode trong windows ). Đây là code mình đã fix lại :
Code:#include "stdafx.h" typedef long (_stdcall *Myfun)(long); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { Myfun pfun; HMODULE hMod; hMod = LoadLibrary("kernel32.dll"); pfun = (Myfun)GetProcAddress(hMod,"lstrlenA"); char s[] = { "abcdef" }; long t1 = (long)&s; long t2 = (pfun)(t1); return 0; }
Đã được chỉnh sửa lần cuối bởi meoconlongvang : 15-08-2008 lúc 11:47 AM.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
cám ơn bạn. Vì đoạn code mình gởi là mình phải chuyển code từ VB. bộ phận VB viết chức năng này dùng để mã hòa và giải mã. ở VB nó viết như vậy nên mình phải theo ý của họ. mìn cũng không hiểu sao VB nó lại gọi hàm lstrlenA từ thư viện kernel32.dll như sau (thấy nó chạy ok):
Option Explicit
Public Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long
Bản thân VB khi gọi hàm đã là gọi theo kiểu _stdcall rồi, tham số ByVal lpString As Long trong trường hợp này là chứa giá trị của biến con trỏ trỏ đến địa chỉ của chuỗi. Khi chuyển code qua VC6 bạn nên gọi trực tiếp hàm lstrlen vì nó đã được khai báo sẵn trong windows.h rồi.
Đã được chỉnh sửa lần cuối bởi meoconlongvang : 15-08-2008 lúc 04:46 PM.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
bạn có biết ý nghĩa cũa hàm này kô ? vì mình phải chuyển từ VB->VC nhưng nó không hiểu.
Hàm này để lấy độ dài chuỗi. Tham số truyền vào là con trỏ trỏ đến chuỗi null terminate string, trả về độ dài của chuỗi. Nó giống như hàm Len của VB vậy đó.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
bạn biết làm sao để mình trả về là 1 địa chỉ kiễu long ở c++.
ví dụ : ? = hamtrave(??). thì ? có giá trị trả về là con trỏ địa chỉ kiểu long thì mình sẽ khai báo như thế nào ? cám ơn bạn nhiều
bạn ví dụ cụ thể hơn đi, mình chẳng hiểu bạn hỏi cái gì cả. ý bạn là muốn làm như thế nào ? nếu muốn lấy địa chỉ của biến thì dùng toán tử &, muốn lấy giá trị địa chỉ dưới dạng số long thì ép kiểu. code của mình đưa lên có minh hoạ sẵn đó.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
bạn có biết lấy giá trị từ điạ chỉ vùng nhớ không ? ví dụ tôi có 1 địa chỉ vùng nhớ là : char *s = "0x0032c2750"; và tôi muốn lấy giá trị của nó tại địa chỉ này ? cám ơn bạn nhiều.