6

Chúng tôi đang cố gắng thêm thử nghiệm đơn vị vào ứng dụng COM C++ cũ. Chúng tôi cũng cần các máy xây dựng của chúng tôi để có thể kiểm tra các bài kiểm tra đơn vị của mình để đảm bảo mỗi bản dựng chưa đưa ra lỗi. Tuy nhiên, chúng tôi không muốn các máy xây dựng phải đăng ký các dll sao cho một máy xây dựng có thể xây dựng nhiều phiên bản song song. Chúng tôi giả định rằng chúng tôi có thể thay đổi để sử dụng đăng ký miễn phí với các tập tin manifest, nhưng tôi đang có một thời gian rất khó khăn để làm việc đó. Không phải trên cơ sở mã của chúng tôi nhưng chỉ trên ví dụ cơ bản được cung cấp bởi Microsoft.
Tôi đã sử dụng trang này http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic8 và nó chỉ đơn giản là sẽ không làm việc, khi tôi cố gắng chạy với dll không đăng ký sử dụng các tập tin manifest, tôi nhận được "Class không lỗi đăng ký"Làm cách nào để chúng tôi có thể kiểm tra mã C++ COM mà không cần đăng ký các dll?

Các mẫu họ cung cấp công việc tốt (bằng cách sử dụng C++ com máy chủ và C++ khách hàng), tuy nhiên khi tôi xây dựng lại chúng họ không làm việc.

Chúng tôi đang sử dụng Visual Studio 2013 và do đó, có vẻ như tôi đã có thay đổi lớn trong cách đăng ký miễn phí com hoạt động, khiến hướng dẫn này không tương thích với trình biên dịch mới hơn.

Có ai có thể chỉ cho tôi các tài nguyên sử dụng đăng ký miễn phí với phiên bản mới nhất của studio trực quan không? Để làm phức tạp thêm những thứ trong ứng dụng của chính chúng ta khi tôi đến đó, chúng tôi đang sử dụng VS 2013 nhưng nhắm mục tiêu trình biên dịch 2010, hy vọng rằng sẽ không tạo ra nhiều khác biệt.

Ngoài ra, nếu có cách nào tốt hơn để chạy thử nghiệm đơn vị C++ trên thành phần com mà không cần đăng ký ngoài tệp kê khai, tôi cũng muốn biết về những tệp đó.

Cảm ơn sự giúp đỡ của bạn.

+0

Chúng tôi đang đối mặt với cùng một vấn đề. Chúng tôi có một thành phần COM với một tệp kê khai để kích hoạt đăng ký miễn phí. Chúng tôi xác minh tệp kê khai là chính xác với ứng dụng hộp cát. Chúng tôi không thể tái tạo sandbox này như là một thử nghiệm gốc chạy trong Visual Studio 2013 - tải thử nghiệm, chạy và không thành công với "lớp không được đăng ký". Có vẻ như người thử nghiệm đang rối tung với bối cảnh kích hoạt trong đó thử nghiệm chạy. Chúng tôi không có ý tưởng làm thế nào để giải quyết vấn đề này. –

Trả lời

1

Bạn có thể triển khai phiên bản CoCreateInstance của riêng mình có tham số đường dẫn DLL bổ sung. Mã này sẽ là một cái gì đó như thế này (xử lý lỗi và các chi tiết khác bỏ qua cho ngắn gọn):

HRESULT CoCreateInstanceForTest(dllPath, rclsid, riid, ppv) 
{ 
    HINSTANCE hinst = LoadLibrary(dllPath); // TODO: Maybe it is already loaded 
    dllGetClassObject = GetProcAddress(hinst, "DllGetClassObject"); 
    return dllGetClassObject(rclsid, riid, ppv); 
} 

Bên cạnh xử lý lỗi, bạn cũng cần phải theo dõi các DLL bạn đã nạp. Sử dụng danh sách hoặc mảng trong đó mỗi phần tử có một bộ dữ liệu để theo dõi điều này. Tại một số điểm bạn có thể muốn dỡ bỏ tất cả hoặc một số trong số họ.

Tất nhiên, tôi giả sử đây là các máy chủ COM không hợp lệ.

Các vấn đề liên quan