-
18-04-2012, 06:57 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Viết thư viện DLL cho Microsoft Office bằng C++?
Em chào và mọi người, em đang nghiên cứu về vấn đề viết thư viện xử lý trong excel bằng c++, tạo ra 1 file DLL và sau đó gọi từ VBA.
Vậy mọi ng cho em hỏi là: Có những phương pháp nào để làm điều này? Yêu cầu em đặt ra đó là máy tính ko cần cài đặt .Net Frame work vẫn có thể dùng đc thư viện này.
Phương pháp mà hiện tại em đang sử dụng theo 1 hướng dẫn trên mạng đó là import file MSO.dll và - theo em hiểu - là sẽ sử dụng các hàm trong đó để xử lí các thao tác trên excel bằng c++. Nhưng em không hiểu tại sao, khi đem file DLL này sang máy tính khác để test (ko cài Frame Work) thì lại không chạy được??
Code:
#include <windows.h>
#import \
"C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" \
rename("DocumentProperties", "DocumentPropertiesXL") \
rename("RGB", "RBGXL")
#import \
"C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6ext.olb"
//Excel Application Objects
#import "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" \
rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \
rename("DocumentProperties", "DocumentPropertiesXL") \
rename("ReplaceText", "ReplaceTextXL") \
rename("CopyFile", "CopyFileXL") \
exclude("IFont", "IPicture") no_dual_interfaces
void __stdcall test ()
{
Excel::_ApplicationPtr xl;
HRESULT hr = xl.GetActiveObject(L"Excel.Application"); //to connect to running Excel instance
if(FAILED(hr) && xl == NULL)
return;
Excel::_WorkbookPtr pWB = xl->GetActiveWorkbook();
Excel::_WorksheetPtr pSheet = pWB->ActiveSheet;
pSheet->Name= (L"DT xd");
Excel::RangePtr pRange = pSheet->Cells;
pRange->Item[1][1]= (L"Dll thật là hay!");
pRange->Item[1][3]= 1.0;
pRange->Item[1][4]= "=today()";
for(int i=1;i<=100;i++)
{
pRange->Item[i][2]=i;
}
MessageBox(NULL, L"I am just trying my wedding dress", NULL, NULL);
CoUninitialize();
//Finish the C++ program
return;
}
Mong mọi người giúp đỡ, em xin cảm ơnView more random threads:
- Save HICON sang .ico
- Cách đọc ghi file nhị phân trong MFC
- Sửa lỗi project nén âm thanh chuẩn mp3
- Hỏi về Convert type1 to type2
- [VC++ ] Danh sáchh liên kết - BT quản lí điểm sinh viên.
- Hộp thoại Check Box
- Hướng đi để tạo 1 auto Game?
- kiểu dữ liệu chuỗi trong DLL?
- Lỗi:: Unhandled exception at 0x76184b32 in opencv
- Bài toán tráo đổi câu trắc nghiệm
-
19-04-2012, 06:02 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
vấn đề này mình thấy không liên quan đến .NET framework
máy tính bên có cài office ko bạn, nếu chưa cài thì ko dc đâu, mso.dll nó còn có thể tham chiếu đến nhiều thư viện khác mà bạn chưa copy sang máy bên kia.
-
20-04-2012, 05:20 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Sau khi em test trên máy chạy ok, và gỡ hết toàn bộ .Net frame work ra thì lại không chạy được
-
21-04-2012, 09:40 AM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
anh có thể nói rõ hơn giúp em đc ko ạ?
/clr và /MT là như thế nào ạ?
-
21-04-2012, 11:45 AM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
có /clr là project của bạn dính dáng tới .NET, máy phải có .NET mới chạy được
/MT là bạn link thư viện runtime vào chương trình của bạn, khi mang sang máy khác không phải cài microsoft C runtime library để chạy nữa.
Để xem bạn có để /clr hay không, bạn nhấn ALT+F7, nhìn bên tay trái chọn Configuration Properties -> General, nhìn sang tay phải xem dòng Common Language Runtime support (thứ hai từ cuối lên) nếu nó là No Common Language Runtime Support thì tức là bạn không dùng .NET.
-
21-04-2012, 04:59 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
có phải bạn thử chương trình bằng cách
build bằng visual studio
chạy -> OK
gỡ .NET framework
build lại
chạy -> ERROR
hay thế nào ?
-
21-04-2012, 06:38 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
em Buid bằng visual studio, sau đó chạy thì đc
Sau khi thử trên máy khác ko chạy đc, em quay lại gỡ .Net framework trên máy em
và tiếp tục chạy thử cái file lúc trước thì ko chạy đc
(các thư viện và bộ excel đều đầy đủ)
-
21-04-2012, 07:23 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bạn thử build lại chương trình rồi chạy xem có được không.
Trước khi build bạn nên kiểm tra lại config của project, có thể bạn dích cái /clr nào chăng, muốn portable thì bạn phải đặt thêm /MT nữa.
-
22-04-2012, 08:04 AM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
có nghĩa là bây giờ bạn build thì vẫn ko chạy dc ?
-
22-04-2012, 07:21 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Đây ạ, như thế này rồi mà sao vẫn ko chạy đc khi gỡ hết .NET framework ra nhỉ
Vệ sinh cá nhân là một phần quan yếu của sức khỏe nam giới. Dùng dung dịch vệ sinh mỗi ngày mang lại nhiều ích, giúp loại bỏ vi khuẩn và vi sinh vật gây hại, giúp khu vực cơ quan sinh dục luôn sạch...
Gel vệ sinh cu, bạn trai có nên...