powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов COM метода из DLL
6 сообщений из 6, страница 1 из 1
Вызов COM метода из DLL
    #38578033
Морфий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Подскажите, пожалуйста, как вызвать COM метод например из C:\Windows\System32\ shell32.dll
который в названии содержит двойное двоеточие [ :: ], например Folder2::CopyHere


Использую JNA

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
package my.wrap;

import com.sun.jna.Library;
import com.sun.jna.Native;

public class System32DLLTest {

	public interface System32DLL extends Library {
		System32DLL INSTANCE = (System32DLL) Native.loadLibrary(("shell32"), System32DLL.class);

		void ExtractIconW();
//		void Folder2::CopyHere(); // Как правильно описать его в этом месте?
	}

	public static void main(String[] args) {

		System32DLL sd = System32DLL.INSTANCE;

		sd.ExtractIconW(); // Ошибок не возникает.
                // Как правильно здесь вызвать Folder2::CopyHere
	}
}



Скрин информации по dll-ке прилагается.
...
Рейтинг: 0 / 0
Вызов COM метода из DLL
    #38578052
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вызов COM метода из DLL
    #38578291
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже JNA не работает с namespace'ами.
http://stackoverflow.com/a/15405792
http://stackoverflow.com/a/11858102

Писать странные имена можно так (но это не поможет)
TestJna.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
package testjna;

import com.sun.jna.Function;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Platform;

public class TestJna {

    public static void main(String[] u) {
        NativeLibrary lib = NativeLibrary.getInstance(Platform.C_LIBRARY_NAME);
        Function printf = lib.getFunction("printf");
        printf.invoke(new Object[]{"Привет printf!"});
        
        NativeLibrary library = NativeLibrary.getInstance("shell32");
        Function function = library.getFunction("ExtractIconW");
//        library.getFunction("CopyHere");
//        library.getFunction("Folder2::CopyHere");
//        library.getFunction("Folder2.CopyHere");
//        library.getFunction("Folder2#CopyHere");
//        library.getFunction("Folder2->CopyHere");
//        library.getFunction("Folder2セックスCopyHere");
//        library.getFunction("Folder2@CopyHere");
//        library.getFunction("Folder2$CopyHere");
    }
}



Другой способ писать странные имена: http://stackoverflow.com/a/518463


Вот предложили сделать native обёрточку в 3 строчки и не мучаться
http://stackoverflow.com/a/1897057
...
Рейтинг: 0 / 0
Вызов COM метода из DLL
    #38578969
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что общего между COM и странными именами? И каким образом, странность имени мешает _нормально_ вызвать COM-метод?

Мне это напоминает рассказы из ремонтной мастерской, когда им перегоревшие материнские платы приносили. Если фиговинка в разъеме питания мешают вставить его в материнскую плату - возмите кусачки и откусите лишнее. Тогда его не нужно будет переворачивать другой стороной.
...
Рейтинг: 0 / 0
Вызов COM метода из DLL
    #38579261
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevИ каким образом, странность имени мешает _нормально_ вызвать COM-метод?
Ну дак вызови.
...
Рейтинг: 0 / 0
Вызов COM метода из DLL
    #38579330
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,

использовал http://j-interop.org/index.html
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызов COM метода из DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]