Tôi không chắc nó có phù hợp không, nhưng có lẽ "Reverse PInvoke" là một tùy chọn.
Nếu trước tiên bạn có thể gọi từ C# sang C++, bạn có thể cung cấp đại biểu .net cho C++ nơi có thể sử dụng làm con trỏ hàm. Sau đó bạn có thể gọi từ C++ của bạn đến C# bằng cách sử dụng con trỏ hàm đó.
public delegate int Read(int target);
[DllImport("yourC++.dll")]
static extern void RegisterRead(Read x);
Read m_Read = new Read(yourClass.Read);
RegisterRead(m_Read);
Có thể có một số thủ thuật với GC thu thập các đại biểu sớm, bất cứ điều gì lớp có các đại biểu có thể cần phải được ghim nếu nó không phải là chỉ được sử dụng immediatly trong RegisterRead
Nguồn
2010-06-16 16:09:41
Bạn có thể quấn rằng dll quản lý thành một thực thi là một ứng dụng giao diện điều khiển và nhận các đối số dòng lệnh, trong khi đưa ra kết quả của nó cho 'stdout'. Sau đó bạn có thể gọi nó như bạn sẽ làm bất kỳ exe nào khác. Không lý tưởng, nhưng có thể làm việc. Tôi hy vọng bạn không sử dụng nhiều chủ đề, bởi vì tôi không biết nếu điều này sẽ làm việc sau đó. –
Bạn đã tự trả lời. Viết một proxy trong C++/CLI (hoặc C++. Net hoặc được quản lý C++ hoặc cách nó được gọi ngày nay), sau đó gọi proxy này từ mã C++ không được quản lý của bạn. – Patrick
có thể điều này sẽ giúp: http://stackoverflow.com/questions/1058897/can-c-cli-be-used-to-call-net-code-from-native-c-applications – smerlin