|
답변 감사드립니다..
이것저것 해보다가 dll이나 com을 자바로 연결해주는 브리지를 찾았습니다.
그걸로 겨우겨우 연명하고 있습니다.
언어의 꽃이라는 C도 얼른 공부해야겠는데 말입니다..^^
능력이...
좌우지간 감사드리고, 좋은 하루 되세요..
김윤동.제라툴 님이 쓰신 글 :
: 질문하신 부분만 간단히 답해 드리겠습니다.
:
: [in] [out] 이런 표시들은 알아보기 쉽게 하기위해서 써놓은것입니다 .
:
: idl 파일에서 사용하기 위해서 그런것 같습니다.
:
: HRESULT VerifyLicense(
: [in] BSTR bstrName,
: [in] BSTR bstrKey,
: [out, retval] long* pbRetVal);
:
: BSTR은 유니코드를 지원하기 위해서 만들어진 포멧 즉 wide char pointer형입니다.
:
: wtypes.h 에 정의 되어 있을 겁니다.
:
: 또한 HRESULT 는 winnt.h에 포함 되어 있습니다.
:
: 지니를 한번도 안해 봐서 잘 모르겠습니다만. .
:
: 대강 읽어 보니 idl 로 정의된 interface를 통해서 c 코드를 호출하는 것같다는 생각이 ㅜ.ㅜ
:
: 조금 도움이 되셨으면 합니다.
:
: From Zeratul
:
: 김영민 님이 쓰신 글 :
: : 안녕하세요, C언어에 대해서 문의 드리고자 이렇게 글을 씁니다..^^
: : 아래의 파일은 자바의 JNI를 사용하기 위해서 필요한 C언어부분입니다.
: : JNI는 자바에서 만들지 않은 외부파일을 자바에서 쓰고자 할때 사용하는 인터페이스라는군요.
: : 이번에 dll파일을 자바에서 쓰고 싶어서 JNI를 공부했습니다만 C언어라는 난관에 부딪혀서 이렇게 도움을 구합니다.
: : 아래의 부분이 C언어 부분입니다.
: :
: : // NativeHello.cpp
: : //
: :
: : #include "stdafx.h"
: : #include "NativeHello.h"
: :
: : BOOL APIENTRY DllMain( HANDLE hModule,
: : DWORD ul_reason_for_call,
: : LPVOID lpReserved
: : )
: : {
: : return TRUE;
: : }
: :
: : ------------------------------------------------------------------------------------------
: : JNIEXPORT void JNICALL Java_NativeHello_SayHelloWorld(JNIEnv *, jobject)
: : {
: : MessageBox(NULL, "java에서 호출한 messagebox", "Hello, World", MB_OK);
: : }
: : ------------------------------------------------------------------------------------------
: :
: : 위의 부분은 자동으로 생성이 되며 자바에서 만들어지는 이 부분 #include "NativeHello.h"만 추가해주면 됩니다
: : 문제는 -------- 실선사이에 있는 부분입니다.
: : 지금 보시는 부분은 win32 dll(맞나?)을 사용한 부분이며 JNI를 설명할 때 예제에서 흔히 나오는 부분입니다.
: :
: : 저는 MessageBox대신 아래의 VerifyLicense를 호출하고자 합니다.
: :
: : VerifyLicense부분
: : HRESULT VerifyLicense(
: : [in] BSTR bstrName,
: : [in] BSTR bstrKey,
: : [out, retval] long* pbRetVal);
: :
: : VerifyLicense is the method must be called before all other methods.
: : It's to verify the run time license information.
: : @param BSTR bstrName: The register name
: : @param BSTR bstrKey: The register key code.
: : @param long* pbRetVal: 1 If verify license cuccessfully.
: : 0 If something wrong with the name/key
: : This variable always be set to 1 in trial version
: : @return S_OK
: :
: :
: : C 언어를 잘 모르므로 어디까지가 소스이며 골뱅이 부분(@부분)은 뭘 말하는지도..잘 모르겠네요.
: :
: : 어떤식으로 호출을 해야 할까요..?
: :
: : 저는VerifyLicense부분이 메소드라고 생각해서
: : HRESULT VerifyLicense(
: : [in] BSTR bstrName,
: : [in] BSTR bstrKey,
: : [out, retval] long* pbRetVal);
: :
: : 이렇게 넣었더니 [in]에서 에러가 발생…
: : 그래서 [in]을 삭제했더니 BSTR이 정의되지 않았다는 에러가 발생했습니다
: :
: : 그래서 에러가 나는 부분을 지우고 다시 컴파일을 해봤습니다.
: :
: : HRESULT VerifyLicense(BSTR bstrName, BSTR bstrKey, long* pbRetVal);
: :
: : 이렇게 만들어 넣어봤더니 에러가 3개가 뜨는군요
: : 1. BSTR이 정의되어있지 않습니다.
: : 2. 구문에러 ; ‘)’가 식별자’bstrName’의 앞에 필요합니다.
: : 3. 구문에러 ; ')'
: :
: : 어떤식으로 해야할지 부탁드립니다.
: : Ps. HRESULT부분에서도 정의되지 않았다는 에러가 뜨겠지요?
: : 어디 부분에서 변수 정의를 해야 하는지요…
: :
: : 장황한 글 읽어주시느라 수고하셨습니다.
: : 감사드립니다..
: : 이왕이면 그냥 가지 마시고 힌트라도 휙 던져주고 가시기 바랍니다..
: : 항상 즐거운 일 있으시길..
|