Я использую C ++ / CLI для связи между приложением .NET и динамически загружаемым C dll.
Пока что весь доступ к DLL основан на экземплярах.
Класс
namespace NxCore {
public class NativeConnector {
имеет переменную для различных ссылок на методы:
HMODULE hLib;
NxCoreProcessTape pfNxProcessTape;
NxCorePriceToDouble pfNxPriceToDouble;
NxCoreGetDefinedString pfNxCoreGetDefinedString;
NxCoreGetSymbolAtom32 pfNxGetSymbolAtom32;
NxCoreStateGetMMQuotes pfNxStateGetMmQuotes;
Я загружаю их в метод подключения:
hLib = ::LoadLibrary("NxCoreAPI.dll");
затем
pfNxProcessTape = (NxCoreProcessTape)::GetProcAddress(hLib, cszNxCoreProcessTape);
pfNxPriceToDouble = (NxCorePriceToDouble)::GetProcAddress(hLib, cszNxCorePriceToDouble);
pfNxCoreGetDefinedString = (NxCoreGetDefinedString)::GetProcAddress(hLib, cszNxCoreGetDefinedString);
и т.д.
Теперь мне нужно переместить это в несколько экземпляров, поэтому я хочу загрузить при первом подключении, выгрузить при последнем отключении.Это означает, что переменные должны быть статическими.
В C # я бы просто сделал их статическими.Я пытаюсь один:
static HMODULE hLib;
и связывание завершается неудачно:
4> NativeConnector.obj: ошибка LNK2020: неразрешенный токен (0A00006D) "private: статическая структура HINSTANCE__ * NxCore :: NativeConnector ::hLib "(? hLib @ NativeConnector @ NxCore @ Connectivity @ Tradex @@ 0PAUHINSTANCE __ @@ A)
Кто-нибудь знает, как это исправить?Заголовочный файл используется в файле .cpp, поэтому он не должен иметь других определений.
Кто-нибудь может сказать, как решить эту проблему?Как я уже сказал, я хочу переместить переменные в статические, а затем сам использовать «подсчет использования», чтобы убедиться, что я освобождаю при последнем отключении.