Замена библиотеки DLL c api на C # dll, не затрагивая клиентов

#c# #c #api #interface

#c# #c #API #интерфейс

Вопрос:

У меня есть c dll, которая является API, который предоставляет множество методов. Я хочу заменить эту библиотеку DLL на другую, написанную на более современном языке. Однако у меня есть клиенты, которые уже интегрировались в c dll, и я хочу просто предоставить им новую c # dll, которая копирует c dll. Мне нужно сделать это таким образом, чтобы клиенты, которые интегрировались в c dll, вообще не пострадали. т. Е. Я просто хочу заменить c dll на c #, и это должно казаться им бесшовным.

Возможно ли это технически? И если да, то как мне следует копировать интерфейс c в c #.

У меня есть несколько методов в c dll, определенных с помощью dllexport

__declspec(dllexport ) аннулирует __stdcall

Ответ №1:

Вы не можете сделать это с C # dll. Вам пришлось бы написать COM-оболочку для управляемой библиотеки DLL, а затем клиентский код должен был бы связать с библиотекой типов COM-оболочки (*.tlb).

Вы могли бы сделать это с помощью C / CLI, создав библиотеку DLL смешанного режима, которая предоставляет собственный интерфейс для неуправляемого кода. Затем вы просто распространяете DLL и .файл библиотеки, как обычно, и клиентский код будет просто ссылаться на .файл библиотеки (как это предположительно происходит сейчас).

Тем не менее, это изрядная часть работы. Если нет какой-либо проблемы с оригинальной C DLL, я не думаю, что я бы стал беспокоиться.