Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 14
  1. #1
    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 ơn

  2. #2
    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.

  3. #3
    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

  4. #4
    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 ạ?

  5. #5
    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.

  6. #6
    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 ?

  7. #7
    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 đủ)

  8. #8
    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.

  9. #9
    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 ?

  10. #10
    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ỉ

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •