검색결과 리스트
일반 프로그램및 기초/C++에 해당되는 글 2건
- 2009.09.24 Divice(디바이스) 사용않함 사용함 or ComPort 사용않함.
- 2009.09.24 JNI DLL 구조
글
선작업
Windows SDK 최신으로 깔아주시고 .. 2008 쓰면 자동으로 깔리는데 현제 윈도우7지원까지나옴
DDK 요것도 깔아주시고
해더 라이브러리 걸어주시고 하면되요 ~_~;;
// TestJniFile.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Common.h"
int main(int argc, char* argv[])
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD iCnt;
///FILE *fp;
char str_buffer[100];
char * sDiveName = "USB"; // 인자 받은것 포트번호
int iState =1; /// 죽이냐 살리느냐 0 살린다 1 죽인다.
// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs( NULL,
0, // Enumerator
0,
DIGCF_PRESENT | DIGCF_ALLCLASSES ); // 디바이스 정보를 가저오는곳입니다.. DIGCF_PRESENT | DIGCF_ALLCLASSES 이부분인자를 바꺼줌으로써.. 가져울 정보의 갯수를
바꿀수있다 그래픽만 , 아님 이너넷만 머 이런식인듯... 인터넷 찾아보면 길이보임 .. 난 잘모름 .. 나하하 ~
if (hDevInfo == INVALID_HANDLE_VALUE)
{
return 1;
}
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (iCnt=0;SetupDiEnumDeviceInfo(hDevInfo,iCnt,&DeviceInfoData);iCnt++) /// 갯수 가지고 포문 을 돌린다 한갯식 정보를 가져와야지/
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;
int i=SPDRP_DEVICEDESC;
while (!SetupDiGetDeviceRegistryProperty( // 디바이스의 각종 정보를 가져온다.
hDevInfo,
&DeviceInfoData,
SPDRP_FRIENDLYNAME, // 디바이스 정보가저오는것을 여기서 변경할수있다 아이디 또는 머 기타 부수적인것 변경해줌으로써 내용이 바뀐다.
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize)
)
{
if (GetLastError() ==ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
// Double the size to avoid problems on
// W2k MBCS systems per KB 888609.
buffer = (LPTSTR)LocalAlloc(LPTR,buffersize * 2);
}
else
{
// Insert error handling here.
break;
}
}
printf("장치명 :[ %s ] \n",buffer);
/// LGE CDMA USB Serial Port(COM7)
sprintf_s(str_buffer,"%s\n",buffer);
if(strstr(str_buffer,sDiveName))
{
if (iState == 0)
{
if (DiviceStateChange(DICS_ENABLE, iCnt , hDevInfo)){
printf("Divice Name :[ %s ] Divice Num -> %d 을 사용으로 변경완료. \n",buffer,iCnt);
}
else
{
printf("Divice Name :[ %s ] Divice Num -> %d 을 사용으로 변경하려 했지만 실패 하였습니다.. \n",buffer,iCnt);
}
}
else
{
if (DiviceStateChange(DICS_DISABLE, iCnt , hDevInfo) )
{
printf("Divice Name :[ %s ] Divice Num-> %d 을 사용 않함으로 변경완료. \n",buffer,iCnt);
}
else
{
printf("Divice Name :[ %s ] Divice Num -> %d 을 사용 않함으로 변경하려 했지만 실패 하였습니다.. \n",buffer,iCnt);
}
}
getchar();
return 0;
}
};
getchar();
if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
return 1;
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return 1;
}
BOOL DiviceStateChange(DWORD NewState, DWORD SelectedItem,HDEVINFO hDevInfo)
{
SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
// HCURSOR hCursor;
//
// This may take a while :^(
//
// hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
//
// Get a handle to the Selected Item.
//
if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
{
DisplayError(TEXT("EnumDeviceInfo"));
return FALSE;
}
//
// Set the PropChangeParams structure.
//
PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
PropChangeParams.StateChange = NewState;
PropChangeParams.HwProfile = 0;
if (!SetupDiSetClassInstallParams(hDevInfo,
&DeviceInfoData,
(SP_CLASSINSTALL_HEADER *)&PropChangeParams,
sizeof(PropChangeParams)))
{
DisplayError(TEXT("SetClassInstallParams"));
return FALSE;
}
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
hDevInfo,
&DeviceInfoData))
{
return TRUE;
}
return TRUE;
}
설정
트랙백
댓글
글
hader 구조
JNIEXPORT jint JNICALL Java_com_common_aa_diviceStateChange
(JNIEnv * env, jobject obj , jint iState, jbyteArray blDiveName);
---------------------------------------------------------------
JNIEXPORT jint JNICALL Java --> 여기 까지는 기본으로 만들어진다.
_com_common -- > 패키지 위치
_aa --> 클레스이름
_diviceStateChange -->함수명
(JNIEnv * env, jobject obj --> 기본으로 만들어지는 값들
, jint iState, jbyteArray blDiveName); --> 내가 인자 넘기는 값이 정의 대어있다 . 여기서보면 int 형은 jint 로 보이고 , byte값은 jbyteArray 값으로 나타난다.
------------------------------------------------------------------
cpp 만들기
해더파일 복사해서 붙여넣기하면 끝 ... 그담에 ; 빼고 {} 묵고 그안에다가 자료 넣는다 리턴값이있는 클래스 이기 때문에 .. 리턴값정의한다.
JNIEXPORT jint JNICALL Java_com_common_aa_diviceStateChange
(JNIEnv * env, jobject obj , jint iState, jbyteArray blDiveName)
{
그담에 컴파일 f7 누루면 DLL만들어진다..
참고
디버깅 예
F9 브러킹 거는거
F5 는 블럭킹 건거 순차적으로 디버깅 (DLL 만들떄는 안돼요 실행파일이 없기때문에 ?? 아님 나도 몰름 .. 이상한 창뜸 ..)
F7 컴파일
조사식에 자료형태를 보고싶으면 마우스로 끌어당기면 보인다 @,.@ 신기..
RECENT COMMENT