JAVA가 호출하는 DLL을 작성하기 위한 VC 구현 방법

PHPz
풀어 주다: 2024-01-22 16:57:16
앞으로
942명이 탐색했습니다.

JAVA가 호출하는 DLL을 작성하기 위한 VC 구현 방법

VC를 사용하여 JAVA 호출용 DLL을 작성하는 방법

}(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 파일을 컴파일하고 생성합니다(두 번째 단계에서 생성된 클래스를 사용해야 합니다)! :)

VC가 작성한 EXE 파일에 대한 DLL 파일을 작성하고 이 EXE가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:docexcel.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿