|
안녕하세요, 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부분에서도 정의되지 않았다는 에러가 뜨겠지요?
어디 부분에서 변수 정의를 해야 하는지요…
장황한 글 읽어주시느라 수고하셨습니다.
감사드립니다..
이왕이면 그냥 가지 마시고 힌트라도 휙 던져주고 가시기 바랍니다..
항상 즐거운 일 있으시길..
|