JNA Error

Programming/JAVA,JSP 2018. 2. 27. 15:48 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

JNA Error













int hr = m_pObjectKey.CreateInstance(__uuidof(KeyObject));


해당 구문에서


CreateInstance 의 리턴 값이



%x : 80040154


%d : -2147221164


형태로 계속 리턴되는 경우








80040154 오류
















System.Runtime.InteropServices.COMExcetption : 80040154 오류로 인해 CLSID가 {100202C1-E260-11CF-AE68-00AA004A34D5}인 구성 요소의 COM 클래스 팩터리를 검색하지 못했습니다.


https://social.msdn.microsoft.com/Forums/vstudio/ko-KR/03d5a6bd-e256-492a-a72b-f011b971834e/80040154-?forum=visualcsharpko
















쉽게 말하면 해당 라이브러리의 DLL 파일의 경로를 찾을수 없어서


객체를 만들 수 없다는 이야기이다.



















1) regasm, regsrv 를 이용하여 재등록을 시도해 보고,







그래도 안된다면









2) regasm 의 경우 /codebase 옵션을 사용 해 보라






























C# 에서 C++ DLL 불러서 쓰기 #2

Programming/C# 2018. 2. 13. 15:55 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# 에서 C++ DLL 불러서 쓰기 #2



2. DLL 참조하기




C++ DLL 을 C# 에서 사용하려면


일단 참조를 하여야 한다.




참조를 하는 방법은




Visual Studio 2013 버전에서는






[솔루션 탐색기] -> [솔루션] 하위 -> [프로젝트] 하위 -> [참조] -> 우클릭 -> [참조 추가] -> 우측 하단 [찾아보기(B)...] -> 원하는 DLL 찾아서 선택



선택을 하면 [참조] 하단에 참조된 DLL 이 보이게 된다.










여기서.......



이 글은


참조된 DLL 을 더블클릭하여 [개체 브라우저]로 보았을때도


하위 멤버들이 보이지 않는


C++ DLL 일 경우 해결하는 방법들을


순서...에 상관없이


메모해 두려고 한다.









C# 에서 C++ DLL 불러서 쓰기 #1

Programming/C# 2018. 2. 13. 15:39 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# 에서 C++ DLL 불러서 쓰기 #1



1. DllImport






DLL Import 시






        [DllImport("CPPDLL.dll"] ,  


         혹은 


        [DllImport("CPPDLL.dll", CallingConvention = CallingConvention.Cdecl)]



         쓰는 것을 볼 수 있다.






C#의 DllImport 특성은 기본 CallingConvention이 StdCall로 되어 있습니다.









DllImportAttribute Class

; https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute(v=vs.110).aspx


DllImportAttribute.CallingConvention Field

; https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.callingconvention(v=vs.110).aspx












일반적인 코드는 __cdecl, __stdcall에 상관없이 C#에서는 명시적인 CallingConvention 없이도 잘 실행됩니다.












하지만 .Net 4.0 이상의 빌드 환경에서는 


명시적인 CallingConvention 이 필요할 수 있습니다.


















.Net 4.0 이상에서는


        [DllImport("CPPDLL.dll", CallingConvention = CallingConvention.Cdecl)]


이 방법으로 사용하는 것을 추천합니다.


































참고 : http://www.sysnet.pe.kr/2/0/11132 [C# 개발자를 위한 Win32 DLL export 함수의 호출 규약 (1) - x86 환경에서의 __cdecl, __stdcall에 대한 Name mangling]






x64 ADO import

Programming/MFC 2016. 10. 28. 16:33 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ERROR


error C2813: /MP를 지정하면 #import를 사용할 수 없습니다. 

error C2653: 'ADODB' : 클래스 또는 네임스페이스 이름이 아닙니다.


x64 ADO import



ADO 바이너리가 두 군데 나뉘어 배포된다. x32 바이너리는 C:\Program Files (x86)\Common Files\System\ado\에 있고, x64 바이너리는 C:\Program Files\Common Files\System\ado\에 있다. 그러니 ADO를 import할 땐 이런 식으로 하면 된다.




#import "C:\Program Files\Common Files\System\ado\msado15.dll"





#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"





#import "libid:EF53050B-882E-4776-B643-EDA472E8E3F2"






x32 x64 상관 없이 돌리려면




#if defined(WIN64)

#import "C:\Program Files\Common Files\System\ado\msado15.dll"

#else

#import "libid:EF53050B-882E-4776-B643-EDA472E8E3F2"

#endif




참조 : https://andromedarabbit.net/wp/unhappy_when_importing_x64_ado/





hiredis MFC import Visual Studio 2013

Programming/Redis 2016. 9. 28. 11:49 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

hiredis MFC import




Hiredis is a minimalistic C client library for the Redis database.

It is minimalistic because it just adds minimal support for the protocol, but at the same time it uses a high level printf-alike API in order to make it much higher level than otherwise suggested by its minimal code base and the lack of explicit bindings for every Redis command.


1. Download Hiredis

Project Site : https://github.com/redis/hiredis


[Clone or download] [Download ZIP]




2. Include Hiredis Header Files



3. Config Hiredis Header Files Path







4. Build Hiredis Library File


Open Hiredis Project





Build Hiredis Project





5. Config Hiredis Library File Path





6. Sample Code




#include 
#include 
#include 

#include "hiredis.h"

#ifdef HIREDIS_WIN
#define snprintf sprintf_s
#endif

int main(void) {
    unsigned int j;
    redisContext *c;
    redisReply *reply;

    struct timeval timeout = { 1, 500000 }; // 1.5 seconds
    c = redisConnectWithTimeout((char*)"127.0.0.1", 6379, timeout);
    if (c->err) {
        printf("Connection error: %s\n", c->errstr);
        exit(1);
    }

    /* PING server */
    reply = redisCommand(c,"PING");
    printf("PING: %s\n", reply->str);
    freeReplyObject(reply);

    /* Set a key */
    reply = redisCommand(c,"SET %s %s", "foo", "hello world");
    printf("SET: %s\n", reply->str);
    freeReplyObject(reply);

    /* Set a key using binary safe API */
    reply = redisCommand(c,"SET %b %b", "bar", 3, "hello", 5);
    printf("SET (binary API): %s\n", reply->str);
    freeReplyObject(reply);

    /* Try a GET and two INCR */
    reply = redisCommand(c,"GET foo");
    printf("GET foo: %s\n", reply->str);
    freeReplyObject(reply);

    reply = redisCommand(c,"INCR counter");
    printf("INCR counter: %lld\n", reply->integer);
    freeReplyObject(reply);
    /* again ... */
    reply = redisCommand(c,"INCR counter");
    printf("INCR counter: %lld\n", reply->integer);
    freeReplyObject(reply);

    /* Create a list of numbers, from 0 to 9 */
    reply = redisCommand(c,"DEL mylist");
    freeReplyObject(reply);
    for (j = 0; j < 10; j++) {
        char buf[64];

        snprintf(buf,64,"%d",j);
        reply = redisCommand(c,"LPUSH mylist element-%s", buf);
        freeReplyObject(reply);
    }

    /* Let's check what we have inside the list */
    reply = redisCommand(c,"LRANGE mylist 0 -1");
    if (reply->type == REDIS_REPLY_ARRAY) {
        for (j = 0; j < reply->elements; j++) {
            printf("%u) %s\n", j, reply->element[j]->str);
        }
    }
    freeReplyObject(reply);

    return 0;
}


7. Sample Monitor






'Programming > Redis' 카테고리의 다른 글

Redis Client Connect Test  (0) 2016.10.26
Hiredis Subscribe/Publish with CWinThread  (0) 2016.10.05
How to use Pub/sub with hiredis in C++?  (0) 2016.09.29
hiredis fatal error C1853:  (0) 2016.09.29
Windows7 Redis 설치 및 실행  (0) 2016.09.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ATL 프로젝트로 만든 DLL 을 MFC 프로젝트에서 사용하기



ATL 프로젝트로 만든 DLL 이름을 ComServer.DLL 이라고 가정하겠습니다.


ComServer 대신에 자신이 만든 DLL 을 쓰면 됩니다.



사용하고자하는 ComServer.dll 파일을 프로젝트 디렉토리에 복사한다.


stdafx.h 파일에 


#import "ComServer.dll" no_namespace named_guids


넣고


빌드를 하게 되면


빌드 폴더에 ComServer.tlh , ComServer.tli 가 생성된것을 확인 할 수 있습니다.



ComServer.tlh 파일을 열어 둡니다.




그다음 Dlg 의 OnInitDialog() 같은 곳에 아래의 코드를 삽입한다.


ComTest 는 객체 이름입니다.


try{


UpdateData();


HRESULT rc;


IComTestPtr pComTest; //IComTest *pComTest 도 가능 !!! (IComTest 의 스마트포인터)


rc = CoCreateInstance(CLSID_ComTest, NULL, CLSCTX_INPROC_SERVER, DIID_IComTest, (void**)&pComTest);


if (FAILED(rc)){


MessageBox("Failure in call to CoCreateInstance");


return;


}


pComTest->(사용하고 싶은 속성이나 메서드);


}


catch (_com_error &e){


CString strBuffer;


strBuffer.Format("Code = %08lXnCode meaning = %snSource = %snDescription = %sn",

e.Error(), e.ErrorMessage(), e.Source(), e.Description());

AfxMessageBox(strBuffer);

}






'Programming > COM,ATL' 카테고리의 다른 글

MFC 프로젝트에서 ATL 연동하기  (2) 2016.03.29
ATL/COM 강좌  (0) 2016.03.25
ATL 프로젝트에서 hWnd사용하기 #2  (0) 2016.03.25
ATL 프로젝트에서 hWnd사용하기  (0) 2016.03.25
ocx, dll 라이브러리 등록  (0) 2016.03.15

Eclipse Tips

Programming/JAVA,JSP 2013. 4. 30. 02:50 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Eclipse 팁 #1 (코드 Style 설정)

 

팀 프로젝트를 진행할때 개발자별로 Coding Style이 달라서 고생하는 경우가 많습니다. 
이를 위해 Eclipse는 코드 형식화를 지원하는데요,

아래와 같이 코딩 규칙을 위해바는 코드가 있다고 가정합시다.

 

해당 코드 위에서 [ Ctrl+Shift+F ] 키만 누르면 아래와 같이 코드가 이쁘게 정리됩니다.

 

이는 Eclipse에서 설정된 Code Formatter의 설정에 따른 것입니다. 
프로젝트에서 개발된 모든 코드에 같은 코딩 규칙을 적용하고 싶다면.. 
결정된 Coding Convention에 따라 Code Formatter의 설정을 바꾼 다음, 
그것을 XML 파일로 Export하고, 개발자에게 Import 시켜 적용하도록 하면 된답니다. 

아래 그림은 Windows - Preferences 에서 "Java - Code Style - Code Formatter"를 
선택했을 때 나오는 그림입니다. 
Eclipse 3.0은 기본적으로 2가지 코드 형식을 기본적으로 내장하고 있습니다.

 

Java Conventions를 선택하고, Show.. 버튼을 누르면 해당 설정을 커스터마이징 할 수 있습니다. 
탭 사이즈와 괄호의 위치 등 모든 것을 변경할 수 있습니다. 

Eclipse 팁 #2 (Import문 정리)

 

개발할 때 어떤 기능을 구현하기 위해 특정 라이브러리를 import 시켜놓고, 
그 기능이 필요없어져서 삭제한 다음에도 import문은 그대로 두는 경우가 많습니다. 

그때 Eclipse가 제공하는 Organize import 기능은 아주 유용한데요.. 
아래와 같이 사용되지 않는 라이브러리를 import한 경우 Eclipse는 앞에 전구를 키고 표시해줍니다. 
이때 [ Ctrl+Shift+O ] 버튼을 누르면 사용하지 않는 모든 import 문이 정리됩니다. 아래와 같이 깨끗하게 말이죠.

 

또 한가지 유용한 기능은 같은 패키지 내에서 여러 개의 클래스를 import할 경우입니다. 
예를 들어 한 패키지 내에서 4개 이상의 클래스를 import 한다면, 
그것을 *로 합쳐서 표시하도록 하고 싶을 때가 있습니다. 
그럴 때는 window - preference 로 가서 java - code style - organize import에서 
Number of imports needs for .*의 수를 4로 해놓으면, 
같은 패키지에서 4개이상의 클래스가 임포트되면 *로 합쳐서 표시해줍니다. 
(Apply 버튼 바로 위에 그 항목이 있습니다.)

 

Eclipse 팁 #3 (영역별 주석처리)

 

여러 줄에 걸쳐 있는 코드를 주석 처리하고 싶은데, 
주석 처리하고자 하는 영역 내에 /* */가 있을 경우 참 곤란하시죠? 

일일이 // 를 앞에 붙이려니 얼마나 손가락이 빠른지를 테스트하는거 같구.. ^^* 
그럴 때 주석처리할 영역을 선택 한 다음 [ Ctrl+/ ] 를 눌러보세요. 
아래와 같이 자동으로 해당 영역을 주석으로 만들어줍니다. 
주석을 해제하고 싶다면 다시 한번 더 [ Ctrl+/ ]를 눌러주면 됩니다.

 

Eclipse 팁 #4 (에디터칸이동)

 

실제 프로젝트를 작업하다 보면 한번에 열어놓은 파일이 30개가 넘는 것은 기본이죠? 
그때 해당 파일들 사이를 열려진 윈도우를 [ Alt+Tab ] 을 이용해서

이동하는 것 같은 기능이 있다면 편할겁니다. 
그러한 단축키가 [ Ctrl+F6 ] 입니다. 
그 키를 누르면 화면 중앙에 아래와 같은 에디터 이동 화면이 뜹니다

 

바로 이전으로 이동할 때는 [ Ctrl+F6 ]이 편하지만, 
여러 개 중 하나를 이동할 때는 [ Ctrl+F6 ]을 누른 후,

[Ctrl+화살표] 를 이용해서 원하는 에디터로 이동하는 것이 편합니다. 

Eclipse 팁 #6 (줄번호 표시 및 줄 이동하기)

 

Eclipse의 기본 설정에 라인 번호는 표시되지 않도록 되어 있습니다. 
디버깅할 때 특정 라인에 에러가 있음을 확인했는데, 일일이 줄을 세어가면서 이동할 수도 없구.. 
그때 해당 라인으로 이동하기 위한 단축키가 [ Ctrl+L ] 입니다. 
윈도우와 같이 Ctrl+G 로 단축키를 변경해서 쓰시는 것도 좋을 듯 합니다. 

아예 줄번호가 항상 표시되도록 하고 싶다면 window - preference 에서, 
Java - Editor로 이동한 다음 "Show line numbers"를 체크해두시면 됩니다. 

Eclipse 팁 #7 (변경사항 추적하기)

 

변경 사항을 추적하고자 하는 파일을 PackageExplorer에서 선택 후, 
오른쪽 버튼을 눌러 컨텍스트 메뉴에서 [ compare with Local History ] 선택합니다.

 

시간대 별로 이전의 작업 결과를 보실 수 있습니다. 
만일 이전의 코드로 되돌아가고 싶다면, 같은 방법으로 파일의 컨텍스트 메뉴에서 
[ Replace with ] 를 선택하고, [ Local History ]에서 변경하면 됩니다.

 

Eclipse 팁 #8 (Javadoc 문서생성 )

 

JavaDoc 형태의 주석으로 소스코드 문서화가 된 상태라고 가정하겠습니다. 
Project 메뉴의 [ Generate Javadoc... ] 기능을 실행하면 
간편한 마법사의 지원을 통해 Javadoc 문서를 생성할 수 있습니다. 

일반적으로 프로젝트 루트 밑에 doc 이란 폴더 안에 JavaDoc으로 생성된 API 문서를 포함합니다.

 

생성될 API 문서에 포함시킬 정보를 선택하는 것이 마법사의 다음 단계입니다. 
Finish 버튼을 누르면 Package Explorer에 아래와 같이 API 문서가 생성된 것을 확인할 수 있습니다. 

Eclipse 팁 #9 (전체프로젝트 ZIP 백업)

 

전체 프로젝트를 백업하기 위해 압축을 해야 할때 유용한 기능입니다. 
File 메뉴의 Export 기능을 실행하면 아래와 같은 윈도우가 뜹니다.

 

선택요소 중에서 ZIP 파일을 선택합니다. 
다음 화면은 백업할 요소들을 선택하는 것입니다. 
일반적으로 자동 생성되는 JavaDoc 문서나 Classes 파일들은 백업하지 않습니다. 
적당한 백업 파일 이름과 위치를 결정하고 Finish 버튼을 누르면 백업이 완료됩니다.

 

이클립스에서 유용한 단축키

 

Ctrl + e : 한줄지움
Ctrl + w : 메뉴보여줌
Ctrl + space : 클래스등 코드 도움
Ctrl + / : 한줄 주석 반대는 Ctrl + \
Ctrl + , : 찾기나, TASK항목 이동

Ctrl + . : 이동

Ctrl + F6 : Editor 선택

Ctrl + F7 : View 선택

Ctrl + F8 : Perspectieve 선택

Ctrl + F11 : 디버깅

Ctrl + 1 : QuickFix 실행

 

Ctrl + Shift + b : 브레이크 포인트

Ctrl + Shift + e : 현재 캐럿에서 끝까지 삭제

Ctrl + Shift + f : 코드 포맷팅

Ctrl + Shift + m : 자동 임포트
Ctrl + Shift + o : 임포트 자동 정리

Ctrl + Shift + space : 입력 파라미터 정보 보여줌


출처 : http://blog.naver.com/simz/



'Programming > JAVA,JSP' 카테고리의 다른 글

JAVA Swing 두개의 판넬을 겹치기  (0) 2013.08.03
JAVA JNI  (0) 2013.05.01
JAVA MYSQL ANDROID REST 활용  (0) 2013.04.28
JAVA MYSQL 활용 4 Android App  (0) 2013.04.28
JAVA MYSQL 활용 3  (0) 2013.04.28