}(2) java 파일을 컴파일한 후 헤더 파일을 컴파일 및 생성(vc용) javac GB2PY.java //클래스 컴파일 및 생성 (3) 현재 폴더에 com/bw/gb2py 폴더를 생성하고 add GB2PY.class 폴더에 넣고 현재 폴더로 돌아가서 javah 명령을 호출하여 헤더 파일을 생성합니다. javah com.bw.gb2py.GB2PY //헤더 파일을 생성합니다. 파일 이름은 com_bw_gb2py_GB2PY.h입니다. 헤더 파일의 내용은 변경할 수 없습니다. 그렇지 않으면 생성된 dll을 사용할 수 없습니다. (4) 새 Win32 dll을 생성합니다. VC에서 GB2PY라는 프로젝트를 만들고 com_bw_gb2py_GB2PY.h를 프로젝트 디렉터리에 복사하여 프로젝트에 추가합니다. 그런 다음 %JAVA_HOME%/include/jni.h 및 %JAVA_HOME%/include/win32/jni_md.h를 프로젝트 디렉터리에 복사하고 프로젝트에 추가합니다. (5) com_bw_gb2py_GB2PY.h: Java_com_bw_gb2py_GB2PY_GetPY에 선언된 메서드를 구현합니다. c에서 Java 문자열과 문자의 변환에 주의하세요. Java의 문자열은 유니코드(더블바이트)로 인코딩되는 반면 char은 싱글바이트입니다. int (*GetPY)(char* szGBString,PY &oPY);JNIEXPORT jstring JNICALL Java_com_bw_gb2py_GB2PY_GetPY
(JNIEnv * env, jclass, jstring name){static HMODULE hModle = LoadLibrary("PYconvert.dll") //타사 dll
GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];
char charPY[512];
len = env->GetStringLength(name) * 2 + 1; //2바이트 길이를 1바이트 길이로 변환하고 종결자를 추가하려면 1을 추가하세요
memset(charName, 0, len);
const wchar_t * w_buffer = env->GetStringChars(이름, 0);
int wlen = wcslen(w_buffer);
len = WideCharToMultiByte(CP_ACP, 0, w_buffer, wcslen(w_buffer) + 1, charName, len, NULL, NULL);
env->ReleaseStringChars(name, w_buffer); //위 코드는 java 문자열 이름의 내용을 char 배열 charName에 복사합니다... //일부 함수 코드를 생략하고 타사 dll을 호출하여 한자를 병음으로 변환합니다. charPY 배열에 저장된 함수 int slen = strlen(charPY);
jchar * 버퍼 = 새로운 jchar[slen];
len = MultiByteToWideChar(CP_ACP, 0, charPY, strlen(charPY), buffer, slen);
if (len > 0 & len
buffer[len] = 0; //위 코드는 char 유형 문자열을 jchar 유형 문자열로 변환합니다. jstring js = env->NewString(buffer, len);
delete [] buffer; return js;} (6) Java에서 호출할 수 있는 dll 파일을 컴파일하고 생성합니다(두 번째 단계에서 생성된 클래스를 사용해야 합니다)! :)
dll을 작성하는 방법을 말씀하시나요? , 아니면 작성한 DLL을 어떻게 호출하나요?
dll:vc++6.0을 작성하는 방법은 무엇입니까? 새 프로젝트를 만들 때 일반적으로 다음 중 하나를 선택합니다.
MFC AppWizard[dll]은 MFC 프레임워크의 동적 링크 라이브러리를 사용할 수 있습니다
Win32 동적 링크 라이브러리 window32비트 표준 동적 라이브러리
그런 다음 필요한 프레임워크를 선택하고 완료하면 기본 DLL이 준비됩니다.
vs2003 이상이면(vs2010은 사용하지 않았기 때문에 언급하지 않겠습니다), 새로 만드세요
엔지니어링에는 일반적으로 두 가지 유형이 사용됩니다.
MFC->MFC Dll
Win32->모든 항목->팝업 대화 상자에서 Dll 옵션을 선택하세요
다른 옵션은 필요에 따라 다릅니다. 그러면 완료되었으며 기본 DLL이 준비되었습니다.
작성한 dll 호출: 호출해야 하는 곳에 LoadLibrary("xxx.dll")를 사용하세요.
xxx.dll은 당신이 작성한 dll이고, xxx.dll에 썼다면
인터페이스의 경우 다음 메서드를 사용하여 dll에서 메서드를 호출할 수 있습니다.
1. exe 프로젝트에 dll의 인터페이스 헤더 파일을 포함합니다. 예를 들어 인터페이스 함수는 void FunName(int a);
2.typedef void(*Func)(int) //인터페이스 정의
3. 필요한 경우 사용:
...........................
HMOUDLE hMyDll = LoadLibrary("xxx.dll");
if (hMyDll != NULL)
{
Func *pDllFun=(Func *)::GetProcAddress(hMyDll,"FunName");//FunName은 Dll의 인터페이스 함수입니다
if (pDllFun != NULL)
{
pDllFun(1); //Dll에서 함수 호출
}
}
4. 더 이상 필요하지 않은 DLL을 제거합니다. FreeLibrary(hMyDll);
/////////////////////////////////////////////// /// /////
exe가 위치한 디렉터리에 Dll이 생성되었나요?
위 내용은 JAVA가 호출하는 DLL을 작성하기 위한 VC 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!