char *function_name = "foo"
을 사용하여 C 프로그램에서 foo()
으로 전화를 걸 수 있습니다. foo()
루틴은 공유 라이브러리에 있습니다. 나는 모든 dlopen 등에 액세스 할 수 없으며 일반 실행 파일의로드 단계 만 수행합니다. 이 이름을 해결하고 공유 라이브러리에서로드 할 수있는 방법이 있습니까?이름에서 라이브러리 함수를 호출하려면 어떻게해야합니까?
답변
아니요. dlopen
과 dlsym
중 하나를 사용하거나 함수 이름과 함수 포인터를 배열하여 원하는 방식으로 찾아보십시오.
'dlsym'은 가상 핸들'RTLD_DEFAULT'를 취할 수 있으므로'dlopen'은 필요하지 않을 수도 있습니다. –
사실, 나는 그것을 언급 했어야했다. '-rdynamic'을 사용하여 링크하지 않으면 주 프로그램에 정의 된 기호를 찾지 않습니다. –
나는 이것이 사실이라고 생각했지만 확신해야했다. –
함수 이름과로드 주소에 대한 액세스 권한이 없으면이 작업을 수행 할 수 없습니다. Windows에서 LoadLibrary()
및 GetProcAddress()
을 사용하여이 작업을 수행 할 수 있습니다.
귀하의 경우, 귀하의 플랫폼, 컴파일러 등을 언급하지 않았거나 가능한지 정확히 알 수 없습니다. 그러나 나는 그렇지 않다고 강력하게 의심합니다.
함수를 이름으로 호출하는 일반적인 방법은 이름과 함수 포인터 테이블을 사용하는 것입니다. 이 기술에 대한주의 사항은 함수가 모두 동일한 서명을 가져야한다는 것입니다.
기능 이름은 다르지만 기능 서명이 다를 경우 if-then-else
사다리를 사용해야합니다.
동일한 서명을 가질 필요는 없으며 반환 유형은 동일합니다. 'rettype (*)()'을 프로토 타입 대신에 함수 타입으로 사용할 수 있습니다. 그러면 당신이 그것을 호출 할 때 올바른 인자 타입을 전달할 책임이 있습니다. 또는 모든 함수 포인터 타입이 다른 함수 포인터 타입으로의 라운드 트립 캐스트를 견뎌 낼 수 있기 때문에 all을 호출하기 전에'void (*)()'를 사용하여 올바른 타입으로 캐스트 할 수 있습니다. –
- 1. dll에서 함수를 호출하려면 어떻게해야합니까?
- 2. ASP.NET에서 파일 뒤에 코드로 함수를 호출하려면 어떻게해야합니까?
- 3. 루아 스크립트에서 C++ 함수를 호출하려면 어떻게해야합니까?
- 4. VB.net에서 IronPython 함수를 쉽게 호출하려면 어떻게해야합니까?
- 5. Windows에서 php로 dll 함수를 호출하려면 어떻게해야합니까?
- 6. C++에서 마스크 된 함수를 호출하려면 어떻게해야합니까?
- 7. 실행 파일에서 bpl로 Delphi 함수를 호출하려면 어떻게해야합니까?
- 8. webbrowser 컨트롤 내에서 javascript 함수를 호출하려면 어떻게해야합니까?
- 9. MysqlConnector를 사용하여 mysql 함수를 호출하려면 어떻게해야합니까?
- 10. 루비 내에서 C++ 함수를 호출하려면 어떻게해야합니까?
- 11. ActionScript에서 배열을 사용하여 varargs 함수를 호출하려면 어떻게해야합니까?
- 12. Selenium에서 함수를 작성하고 다른 페이지에서 호출하려면 어떻게해야합니까?
- 13. CakePHP 컴포넌트에서 도우미 함수를 호출하려면 어떻게해야합니까?
- 14. 이름에서 선택자를 얻으려면 어떻게해야합니까?
- 15. JavaScript - 문자열 이름에서 함수를 호출하고 배열 객체를 전달하려면 어떻게해야합니까?
- 16. 함수에서 이벤트 처리기를 호출하려면 어떻게해야합니까?
- 17. 메모리가 부족하지 않고 중첩 for 루프에서 비동기 함수를 호출하려면 어떻게해야합니까?
- 18. C++/CLI에서 'out'매개 변수를 사용하여 함수를 선언하고 호출하려면 어떻게해야합니까?
- 19. Apache Rhino를 사용하여 하위 속성 함수를 호출하려면 어떻게해야합니까?
- 20. 특정 필드에 대해 내 테마 전처리 함수를 호출하려면 어떻게해야합니까?
- 21. 오라클 함수를 매개 변수화 된 쿼리의 일부로 호출하려면 어떻게해야합니까?
- 22. 메소드 내부에서 javascript 함수를 호출하려면 어떻게해야합니까? 나는 내부입니다
- 23. C++에서 함수 당 한 번만 함수를 호출하려면 어떻게해야합니까?
- 24. 사용자가 버튼을 클릭 할 때 함수를 호출하려면 어떻게해야합니까?
- 25. 클릭시 맞춤 플러그인을 호출하려면 어떻게해야합니까?
- 26. SAP에서 ActiveX를 호출하려면 어떻게해야합니까?
- 27. 개체에 '! ='메서드를 호출하려면 어떻게해야합니까?
- 28. 다른 사이트를 호출하려면 어떻게해야합니까?
- 29. FreeMarker 템플릿의 객체에서 Java 메소드를 호출하려면 어떻게해야합니까?
- 30. 스크립팅 언어로 DLL을 호출하려면 어떻게해야합니까?
대상 OS는 무엇입니까? – pascal
파스칼이 지적했듯이이 질문에는 실제로 OS 또는 OS 제품군에 대한 태그가 필요합니다. (아마도 POSIX ..?) –