Как изменить / на \\ в пути к jvm.dll - PullRequest
1 голос
/ 07 апреля 2020

Я подумал, какой заголовок выбрать на 30 минут, потому что моя проблема довольно странная.

Предположим, у нас есть родной dll C ++ (C .dll ). Я хочу загрузить эту DLL с помощью JNA в мой java проект. Теперь, что важно: в C .dll широко используется путь к файлу, откуда была названа эта dll. И есть буквально оператор if, подобный этому:

if (filepath[2] != _T('\\'))
{ 
    //throw an arror and close dll loading
}

Если я пытаюсь загрузить этот dll через JNA, он выдает внутреннюю ошибку dll со следующим сообщением: «Отсутствует определенный знак» \ 'in: "C: / Program Files / AdoptOpenJDK / jdk-14.0.0.36-hotspot / bin / client" на позиции: 3 "

Я знаю природу этой ошибки, и я также понимаю, что это выражение if действительно глупо, потому что оно абсолютно анти-кроссплатформенное, но я не смог изменить C .dll , потому что оно пришло от третьей стороны, ну, вы знаете эту историю.

Что также проблематично c - Я не мог просто заменить этот параметр пути к файлу где-нибудь (например, через какой-то другой файл wrapper.dll или около того), вызвать эту оболочку через JNA и быть счастливым, потому что все это Проверка пути к файлу внутри C .dll кодируется с помощью нескольких макросов, и подразумевается, что все процедуры получения и проверки этого пути к файлу выполняются полностью автоматически (это фактически обеспечивается другими DLL, которые C .dll должны использовать, и для которых у меня нет исходного кода, да, это , что плохо). Так что не так просто найти конкретное значение, которое я мог бы заменить напрямую.

Итак, мой вопрос: возможно ли как-нибудь заменить эти (/) на двойные (\) обратные слеши в пути к файлу jvm? .dll во время выполнения или так? Можно ли написать обертку.dll, которая будет делать это для моих C .dll , либо в C ++ или java? Мне, наконец, нужно запустить это в JNA, поэтому на самом деле путь к файлу в точности равен JAVA_HOME или около того - потому что, насколько я понял, виртуальная машина java - это именно тот процесс, который загружает C .dll в этой ситуации я получил неверный путь к файлу jvm.dll. AFAIK все пути java обозначены символом (/) в JDK, поэтому, на мой взгляд, это не представляется возможным напрямую со стороны JNA. Но возможно ли это вообще без изменения оригинального .dll? Может быть, есть что-то вроде инструментов замены пути для java в Windows или около того?

...