Tôi có một nhiệm vụ đơn giản:Làm thế nào để sử dụng một .Net hội trong Delphi mà không cần đăng ký nó trong GAC hoặc COM?
là có thể viết một DLL Delphi và đặt .Net Assembly (chỉ với một giao diện với 4 phương thức và một lớp thực hiện giao diện) bên cạnh nó và gọi nó từ Delphi DLL ?
Ý tôi là, tôi có thể nhập các loại .Net trực tiếp từ .Net assembly (tên tệp tương đối) nếu tôi tạo một đơn vị tlb và delphi cho tlb, mà không cần đăng ký Assembly/tlb?
tốt nhất, thalm
EDIT (những gì tôi tìm thấy):
Hầu hết các giải pháp phải đăng ký ít nhất một dll/TLB cho COM. Nhưng điều hứa hẹn nhất tôi tìm thấy là: Unmanaged Exports từ Robert Giesecke, một Visual mẫu dự án Studio của nó cho phép bạn viết phương pháp tĩnh C# (hoặc bất kỳ ngôn ngữ Net) và gọi cho họ từ bất kỳ ngôn ngữ không được quản lý, tuyệt vời:
class Test
{
[DllExport("add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
EDIT 2: Nó thực sự hoạt động! Bạn thậm chí có thể kiểm soát các loại marshalling, unbeliveable !!!
Tìm kiếm tin tức hay. Nó gần như ngay lập tức có ý nghĩa một khi nhớ rằng tiêu đề .Net chỉ là một phần mở rộng của định dạng COFF. Tôi đã có bài viết tuyệt vời với chi tiết về các vị trí .Net nhưng không thể tìm thấy nó ngay bây giờ. Đây có thể là cách tốt hơn (không đơn giản hơn) để thực hiện: http://www.codeproject.com/KB/cs/unmanagedtomanaged.aspx – user44298
cont. Một tiện ích hữu ích khác mà tôi đã tìm thấy nhờ nghiên cứu giải pháp của bạn có thể hữu ích cho khách truy cập http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx – user44298
@Ivo, đây chỉ là cách phổ biến lưu trữ CLR và sử dụng COM interop qua mscoree để truy cập các loại của bạn. (Không chắc chắn nếu ngay cả một bài viết codeproject là thực sự hữu ích cho một cái gì đó đã được tài liệu trên msdn http://msdn.microsoft.com/en-us/library/dd380850.aspx) Điều này là hoàn toàn tốt đẹp cho rất nhiều trường hợp sử dụng, đặc biệt là nếu bạn muốn nhiều hơn chỉ là phương pháp và sử dụng một ngôn ngữ có xử lý COM tốt như C + + hoặc Delphi. Nó không giúp bạn khi bạn phải có một DLL "thực" mặc dù. ;-) –