AI muốn lập trình DLL cho Excel và các loại bằng Delphi thì xem video này nhé!

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Thật mà, không nổ đâu, mình là trong số ít những người đầu tiên ở VN ta làm với Delphi từ bản đầu tiên: Delphi 1.0, 16bit, thời Windows 3.x.
Hồi đó có 1 cty ở SG, tên gì quên rồi, là nhà phân phối của Borland, nhập Delphi về.
Lúc đó Internet chỉ mới vào VN, chưa phổ biến, search tìm cái gì cũng không có. Chỉ có nguồn tham khảo là thư mục Source của Delphi.
Làm app 16bit lúc đó trên Win3.x 16bit cực lắm, mấy vấn đề về memory, resource không dồi dào, dễ dàng như 32bit, 64bit như bây giờ.
Sau lên dần tới Delphi 7, rồi từ sau đó hầu như mình không còn dùng Delphi nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi cũng thật mà. Sở trường của tôi là Văn (Hoá) và Triết chứ không phải khoa học tự nhiên. Tôi chuyên nghiên cứu Văn cổ Tây phương những năm cuối thập niên 70's

Lúc tôi bắt đầu làm việc với máy tính thì khỏi nói chuyện net mất công. Toàn là máy mainframe và midi thôi.

Làm app 16bit lúc đó trên Win3.x 16bit cực lắm, mấy vấn đề về memory, resource không dồi dào
Vậy mà đã than. Ứng dụng tôi chạy trên PDP11/70; 32K word (*) memory; hệ điều hành chiếm 16K; chỉ còn 16K để chương trình chạy. Kỹ thuật map memory và chạy background program là bắt buọc phải học.

(*) 1 word của máy PDP11 là 2 bytes, tức là 16 bits.
 
Upvote 0
Đây là video hướng dẫn cách tạo DLL trên Delphi nhưng sử dụng trong VBA, Excel. Đây là phương pháp lập trình chuyên nghiệp nhưng không phải là khó. Giúp bạn bảo mật code của phần mềm tốt hơn.
Loạt video hướng dẫn lập trình Delphi cơ bản của mình tại đây:
https://www.giaiphapexcel.com/diendan/threads/hướng-dẫn-lập-trình-delphi-cơ-bản-từ-bluesofts-net.138736/
em chào thầy! lời đầu chúc thầy sức khỏe.
code vba em chưa tới đâu cả! giờ lại tò mò qua delphi! chả là có làm theo "cờ líp" thầy hướng dẫn. và kết quả ra sai thầy ạ. mong thầy chỉ giúp em sai chỗ nào? em thử gửi code cho bạn dùng office 32 bit thì chạy ổn! còn em dùng 64bit lại ra kết quả sai.
220901

lúc đóng excel nó lại hiện ra bảng này nữa
220900
ps: File excel em để trong Win32 với Win64 luôn thầy ạ.
link googledrive
 
Lần chỉnh sửa cuối:
Upvote 0
Wow, làm cái gì mà tới tràn stack dữ vậy ?
Xem qua code của cậu rồi, phần code VBA cậu declare sai rồi. LoadLibrary trả về LongPtr cho VBA7, FreeLibrary nhận vào LongPtr.
Và 2 hàm LoadDLL và FreeDLL cũng phải viết lại.
 
Lần chỉnh sửa cuối:
Upvote 0
Delphi phát triển Mạnh đó he ... tuyển dụng quốc tế nè
 
Upvote 0
Mạnh mới test lại các kiểu thì thấy hàm đó viết lộn một chút Mạnh điều chỉnh lại như sau mới chạy OK khi ta sử dụng ADO lấy dữ liệu từ 1 Sheet vào Mảng sử dung Phức thức GetRows ... xong dùng hàm chuyển mảng gán lên Range
Mã:
function TransArr(ssArr: OleVariant): OleVariant; stdcall;
var
    tmpArr    : OleVariant;
    x, y    : integer;
    lcol,lRows  : integer;
begin
  lcol := VarArrayHighBound(ssArr, 2); //Cot
  lRows := VarArrayHighBound(ssArr, 1); //dong
  tmpArr := VarArrayCreate([1, lcol + 1, 1, lRows + 1],varVariant);
    for x:= 0 to lcol do begin
        for y:= 0  to lRows do begin
            tmpArr[x + 1, y + 1] := ssArr[y, x];
        end; // y
    end; // x
    Result := tmpArr;
end;
Mô tả sơ bộ 1 chút
1/ Nếu ta ko + thêm 1 trong hàm thì khi lấy lên ta phải cộng thêm 1 khi Resize
Mã:
Range("A2").Resize(UBound(dArr, 1) + 1, UBound(dArr, 2) + 1) = dArr
2/ Còn nếu ta đã cộng thêm 1 trong Hàm TransArr thì khi ta lấy lên gán dữ liệu ko + thêm 1 nữa
Mã:
Range("A2").Resize(UBound(dArr, 1), UBound(dArr, 2)) = dArr
3/ 1 ở đây là 1 cột và 1 dòng

Cảm ơn thuyyeu99 Viết cho Mạnh cái Hàm hay và hay hết tất cả là Mạnh biết xài mảng 2dArray trong Delphi
To @ThangCuAnh
Từ hướng dẫn của @thuyyeu99 bài 88 link sau

Mạnh viết cái hàm TransArr trong Dephi bài 99 link sau thấy sử dụng tạm OK

Giờ kiến thức học Delphi khá thêm chút + muốn ôn lại bài cũ vậy cho Mạnh hỏi ?!!

1/ Ngoài cách viết trên còn cách nào viết không ko ???

2/ Theo Bạn cách viết nào trên Delphi là tốt nhất

3/ Nếu được cho Mạnh xin 1 code để học ... còn gợi ý như mây bay thì thôi ... không mong đợi !!??

Mạnh rất thành thật và thẳng tưng vậy có chi vui vẻ ... xin cảm ơn
 
Upvote 0
Khổ ghê, cứ réo tui là sao trời. Đã không muốn đụng tới Delphi của cậu nữa mà cứ kêu "nà nàm thao".
1. Coding style này tui không chấp nhận. Nhìn code đã không muốn đọc rồi. Cậu search "Borland Coding Style Guide" về đọc và làm theo đi. Hay mở source của Delphi ra đọc, xem style của họ ra sao. Ai nói cậu cái begin phải để cùng dòng if, for vậy ? Tab space là bao nhiêu, 4 hay 2 ? Dùng spaces hay Tab char ?
2. Delphi IDE cậu dùng còn chưa rành, quăng cho cậu cái link để cậu chỉ download component về Browse Folders xài, chỉ install rồi dùng thôi mà cậu còn không biết làm, làm biếng làm nữa thì tui thua thiệt luôn. Học, mò cách dùng IDE đi đã.
3. Pascal và Object Pascal cậu đã nắm rõ chưa, ví dụ class, kế thừa, virtual, overwrite. Còn 1 đống sau này của các Delphi mới như interface, template... nữa, cậu nắm chưa ?.
Đọc các bài post của cậu tui thấy ngôn ngữ Pascal và các hàm, procedure của Pascal thôi, như Assign, BlockRead, BlockWrite... thôi cậu đã nắm không vững. Cậu học lại căn bản, từ từ, từ Pascal lên Object Pascal, cách dùng string, Pointer, PChar, File I/O.... Dùng Delphi, lập trình Windows mà không biết dùng Pointer, PChar thì thua luôn.
Nội cái RTL/VCL của Delphi thôi, khổng khổng lồ, cậu nắm, dùng được thôi đã là kỳ công rồi đó, không cần đi đâu xa tìm kiếm
4. Cơ chế exception handing của Delphi cậu nắm chưa: try/finally/except/raise... đó. Mấy cái code kia, vd như ssArr không phải là array thì nó sẽ quăng exception cái đùng vào mặt cậu đấy, văng liền. Học cái này đi.
5. Dùng cái gì có sẳn của Delphi hay bất kể cái nào của các ngôn ngữ khác, đều có cái giá của nó. VD code trên OleVariant, mấy hàm VarArrayxxx. Cậu build code với "Using debug dcu", debug vào các hàm này xem nó làm ra sao.
....
Còn nhiều nữa, tui là người lười viết, ít nói nữa. Nhưng tóm "nại nà thế lày": cậu xây cái nhà mà ai quăng cho cậu cái gì cậu cũng quơ đại vào xài là không ổn. Bất kể vật liệu đó xẩu dỏm, bug biếc ra sao. Thế cái nhà của cậu có bền,đẹp, có gốc không ? Cho nên tôi luôn nói cậu là học bò trước rồi mới học chạy, rồi mới tính chuyện xây nhà bán. Tôi thấy cậu không có tính mày mò, tự tìm hiểu, cứ lấy đại code người khác về ráp vô xài đại.
Tôi cá là tới bây giờ, các tính năng debug của Delphi IDE cậu nắm còn chưa hết đó, nói chi tới mức debug trên mã chay Assembly.
Cái nào VBA không làm được thì mới làm bằng Delphi, còn VBA làm được thì dùng VBA, như mấy Scripting, Files, Folders, Dictionary đó. Cậu code chưa chắc đã sinh code tốt hơn dùng trực tiếp trên VBA, rồi phải gánh thêm 1 tầng từ VBA qua Delphi DLL của cậu, rồi mới tới mấy cái Dll đó. Chi cho khổ vậy, nặng thêm, chậm thêm.

Vài lời "ngu ý", khó nghe thì bỏ qua, kkk :p
Nếu cậu chỉ muốn quơ quào để làm cho có, cho xong cái VBLibrary.dll "tả pín lù" của cậu thì bỏ qua còm men của tôi. Còn nếu cậu thực tâm muốn học, làm bài bản, có gốc thì tạm thời dẹp cái Dll đó đi, sau này đụng lại. Học A-Z đã.
Tui cũng từ Turbo Pascal, lên Borland Pascal, rồi Borland Pascal for Windows, rồi mới tới Delphi. Debug code build release mode trong cửa sổ CPU Assembly là thường.
Thần tượng của tui là cha đẻ Delphi đó, sau qua làm cho MS, F# đó. Chỉ cần đọc mã hex chứ chưa nói tới mã Assembly, mà tìm ra chổ sai đúng 1 byte của Delphi Compiler. Quá kinh.
 
Lần chỉnh sửa cuối:
Upvote 0
KHỔ lắm nếu ko nói vậy thì làm sao học được cái khả năng của người khác và làm sao biết trong bụng ai đó có một mớ giun ta ?! khi ta ko qua trường lớp học mò học mót -0-0-0- ===\.
 
Upvote 0
Tui cũng dân tự học đó, có trường lớp đâu. Bằng ĐH đầu tiên của tui là Tự động mà, sau ra trường, nhờ tự học mà cty họ thấy khả năng, đam mê của tui họ mới tuyển đấy chứ.
Còn sau này là lãnh vực "rờ chxx em", "phò rên siết", "tìm lỗ", "sờ cu rờ ti"..., tui cũng tự học đó, hồi đó có ai biết gì về nó đâu, sách nước ngoài cũng không có. Giờ thì VN ta mấy năm gần đây mới mở, có nhu cầu về nó.
Hì hì, nói bậy vậy mấy bác không hiểu, nó thuộc lãnh vực An Ninh Mạng, An Toàn Thông Tin đó :p
Tự học sẽ chắc, nhớ dai, nhớ lâu. Cậu tin vậy đi.
Hỏi cậu cái này, mấy cái hàm trong VBLibrary.dll của cậu đó, cậu làm sao debug vào từng hàm, vào code Delphi của cậu được, từ Excel -> VBA -> Code của cậu ? Cậu đã làm được chưa ???
 
Lần chỉnh sửa cuối:
Upvote 0
Tui cũng dân tự học đó, có trường lớp đâu. Bằng ĐH đầu tiên của tui là Tự động mà, sau ra trường, nhờ tự học mà cty họ thấy khả năng, đam mê của tui họ mới tuyển đấy chứ.
Còn sau này là lãnh vực "rờ chxx em", "phò rên siết", "tìm lỗ", "sờ cu rờ ti"..., tui cũng tự học đó, hồi đó có ai biết gì về nó đâu, sách nước ngoài cũng không có. Giờ thì VN ta mấy năm gần đây mới mở, có nhu cầu về nó.
Hì hì, nói bậy vậy mấy bác không hiểu, nó thuộc lãnh vực An Ninh Mạng, An Toàn Thông Tin đó :p
Tự học sẽ chắc, nhớ dai, nhớ lâu. Cậu tin vậy đi.
Hỏi cậu cái này, mấy cái hàm trong VBLibrary.dll của cậu đó, cậu làm sao debug vào từng hàm, vào code Delphi của cậu được, từ Excel -> VBA -> Code của cậu ? Cậu đã làm được chưa ???
Có cái thấy được có cái ko có cái đang làm rở ... nói chung nó như cái mớ bòng bong ấy
Nhưng kinh nghiệm tự mò cho mạnh thấy khi vượt qua cái mớ bòng bong đó là mạnh viết code tạm ok và code sẻ cải tiến theo theo thời gian
hôm nay viết vầy thấy ok rồi mừng hết lớn.... sau một năm sau nhìn lại code đó thấy ngớ ngẫn và mắc cười ... vậy là thấy mình lớn thêm một tẹo

đại khái thế .... code két với Mạnh mê như mê game vậy thôi thích cái gì mò cái đó các kiểu. ngoài ra ko mưu cầu gì khác !
 
Upvote 0
Lập trình DLL chỉ trong phạm vi xử lý dữ liệu và tính toán của mình thôi thì dễ như video bài đầu tiên. Còn làm DLL để can thiệp vào Windows API là không đơn giản với bất kỳ ai. Nhiều người thành thạo code VBA (trong phạm vi Excel) nhưng đụng vào các hàm Windows API, DLL thì tắt tiện vì còn không hiểu 32, 64-bit, lập trình nhúng activex,.... khác nhau cái gì. Cũng như vậy, người rất rành về Delphi có thể lập trình kết nối SQL Server làm phần mềm bán hàng này nọ cũng chưa chắc đã tinh thông Windows API để làm chủ nó. Vì nó là một nền tảng lập trình riêng phải hiểu để tích hợp. Vậy nếu ai mà quen cách học VBA kiểu như mò mẫm, thì đừng có đụng vào mấy thứ API của Windows nếu chưa học tốt Pascal, Object Pascal. Delphi không phải công cụ dành cho dân lầm ẩu, học ẩu đâu. Nếu muốn học Delphi tốt (có thể không phải đích là chuyên gia) thì vẫn cần phải học ngôn ngữ Object Pascal trước đã. Làm tốt cái Delphi đã hỗ trợ như VCL rồi hẵng đụng tới kiến thức khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Thấy bạn Mạnh thường xin source, thế mạn phép tui hỏi cái này: Khi bạn cài Delphi xong, từ đó tới giờ, bạn có vào thư mục đó lục lọi từng thư mục con, từng file .exe, .pas, ví dụ, demos, help file... tất tần tật không ? Xem nó là cái gì, bên trong file là gì chưa, có compile, chạy thử các ví dụ chưa ?
 
Upvote 0
Vãi thế .... bói banh ta lông hết ròi ..... nhưng cái biết cái ko túm lại là Tịt ............ xin để học ko biết thì hỏi ko có chi phải xí hổ cả ... chỉ dấu dốt ko dám hỏi ko dám xin mới thật sự xí hổ thui !!!!!!!!!!!???????????????????? /*-*/ -0-0-0-

1564220510675.png -0-0-0- /*-*/
221847
 
Upvote 0
OK, thư mục Demos hay Examples gì đó vào chưa ?
Thư mục Source là 1 thư mục khổng lồ rồi đó, tìm đâu cho xa.
Cậu chụp cho mình thư mục RTL thử. Mấy thư mục trên hình mà cậu nhảy vào là tẩu hỏa nhập ma đấy.
 
Lần chỉnh sửa cuối:
Upvote 0
Vãi thế .... bói banh ta lông hết ròi ..... nhưng cái biết cái ko túm lại là Tịt ............ xin để học ko biết thì hỏi ko có chi phải xí hổ cả ... chỉ dấu dốt ko dám hỏi ko dám xin mới thật sự xí hổ thui !!!!!!!!!!!???????????????????? /*-*/ -0-0-0-
...
Nếu đến giờ này mà bạn cũng còn tịt thì nói trắng ra, bạn giống tôi.
Mình mò hoài không ra thì cứ việc làm bộ như không cần phải biết, cứ hỏi mấy người mò nhiều rồi và nhờ họ chỉ cho. Ai gáy kệ họ, mình có code là được rồi.
Châm ngôn của tôi:
If you dont know the wheel, just shrug your shoulders and say "who wants to reinvent the wheel?"
 
Upvote 0
Nếu đến giờ này mà bạn cũng còn tịt thì nói trắng ra, bạn giống tôi.
Mình mò hoài không ra thì cứ việc làm bộ như không cần phải biết, cứ hỏi mấy người mò nhiều rồi và nhờ họ chỉ cho. Ai gáy kệ họ, mình có code là được rồi.
Châm ngôn của tôi:
If you dont know the wheel, just shrug your shoulders and say "who wants to reinvent the wheel?"
221852
 
Upvote 0
Cậu chụp cho tôi thư mục RTL đi, thư mục nào mà có System.pas đó.
 
Upvote 0
OK, thư mục Demos hay Examples gì đó vào chưa ?
Thư mục Source là 1 thư mục khổng lồ rồi đó, tìm đâu cho xa.
Cậu chụp cho mình thư mục RTL thử. Mấy thư mục trên hình mà cậu nhảy vào là tẩu hỏa nhập ma đấy.
Capture.JPG
Tại thấy Bạn có kiếm thức code rộng nói Chung và Delphi nói riêng .... nên tranh thủ tận dụng khai thác chút ... vui vẻ he
 
Upvote 0
Chà, nay nó thêm, tách ra nhiều vậy ta
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom