16:53에 DLL 파일을 추가하는 방법에 미시시피

E

elrayes

Guest
안녕


석사 Visual Studio를 준비 만든 DLL 파일을 추가하는 방법을 알고 그들을 사용 및 VC , 내가 도울 수있을 google 검색을 시도했지만 아무 것도 찾을 수, 나도 알아하지만 내가 경험있는 프로그래머는 쉽지
않아 원인이없습니다.

감사합니다

 
여기에, 확실하지 않으려고이 경우 MSVC의 오른쪽에 버전에 대한 ...

http://msdn.microsoft.com/en-us/library/3y1sfaz2 (VS.80). 위로

는 C 자신이 할일은 다한 거 아닌 물건으로 사기 및 GUI를 C #을위한 DLL의 훨씬 더 쉽게 사용하는 경향이있다.

행운을 빈다

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="미소" border="0" />
 
안녕 elrayes,

함께 할 수 있을까요은 LoadLibrary (), GetProcAddress를 ().만약 함수 포인터 (! = NULL을) DLL의 함수를 호출하기만하면 유효합니다.lpProcName 매개 변수는 함수의 이름을 DLL에 저장됩니다.MSDN의 상담.

안부 인사,
알렉스

 
isn't completely clear.

DLL 파일을
완벽하게 준비가 만든
용어는 명확하지 않습니다.내 의견을, hpp
*. h 또는 *. dll을 함께 제공되는 파일은 *. lib에와 참여 것이다 (그리고 설명서와 예제 응용 프로그램, 너무).그런 다음 DLL의 인터페이스는 간단합니다.그렇지 않으면, 당신과 가져오기 라이브러리를 생성하기 위해이 함수를 호출을 입력 매개 변수를 추측해야합니다.의 경우는
C DLL을, MS의 전형적인 장식 이름으로 인식할, 쉽게, 도구는 DLL에서 함수 매개 변수를 추출할 수있을 테니까요.

 
사실 난,하지만 *. H와 파일 및 라이브러리 파일에
*. lib에 파일과 이러한 기능의 일부를 사용하여 그 효과를 포함하는 파일을 추가 않았다 아직 장소는 어디에서해야하는 DLL을 어떻게 사용해야할지 모르겠다 * . dll이, 내 사업을하거나 또는 포함
어디?, 옆에있는
어떤 한 프로그램에 DLL을 가져오는 쓸 수있는 파일 자체의 문법을 내려.
귀하의 답변에 감사드립니다.

 
거기에 DLL을, 정적 링크
또는 동적 링크를 사용하는 두 가지 방법으로, 정적 링크와 함께, 당신은 단지 파일은 'h'는하고 프로젝트에 'lib에'포함 파일을 추가합니다.
와 연결하는 동적, dll이 프로그램의 검색 경로에서이어야하며 그것을 런타임에로드됩니다.the exe를 같은 디렉토리에 넣어 놔.
난,
너무 복잡하고 비대한 내 의견에 Visual Studio를 사용하여 직접, 볼랜드 빌더를 사용 dont.하지만 방법이 더 많거나 적은 기능과 동일합니다.
나는 여기있는 동글 수있는 USB 인터페이스를 지원 pcan_usb.dll '의 기능을로드하는 데 사용하는 코드입니다.그것은 당신이 몇 가지 아이디어를 제공한다.당신은 dll을 호출과 매우 유사 유형의 대부분을 찾아야한다 또는 동일합니다.

코드 ://------------------------------------------------ ---------------------------# ""PCAN_USB.H 포함//------------------------------------------------ ---------------------------HINSTANCE g_i_DLL;

숯불 g_LibFileName [] = "PCAN_USB.DLL";형식는 DWORD (__stdcall * PCAN_Init) (워드 wBTR0BTR1, int CANMsgType);

형식는 DWORD (__stdcall * PCAN_Close) ();

형식는 DWORD (__stdcall * PCAN_Status) ();

형식는 DWORD (__stdcall * PCAN_Write) (TPCANMsg * pMsgBuff);

형식는 DWORD (__stdcall * PCAN_Read) (TPCANMsg * pMsgBuff);

형식는 DWORD (__stdcall * PCAN_VersionInfo) (LPSTR lpversioninfo);PCAN_Init g_CAN_Init;

PCAN_Close g_CAN_Close;

PCAN_Status g_CAN_Status;

PCAN_Write g_CAN_Write;

PCAN_Read g_CAN_Read;

PCAN_VersionInfo g_CAN_VersionInfo;//------------------------------------------------ ---------------------------bool __fastcall InitCan (무효)

(

만약 (Load_dll () ==) 거짓

(

응용 -> MessageBox

( "필수 파일 'PCAN_USB.DLL'로드되지 않을 수있는가?", "오류", MB_ICONSTOP);

돌아 거짓;

)반환 사실;

)//------------------------------------------------ ---------------------------bool Load_dll (무효)

(

면 (== NULL을) g_i_DLL

(

=하여 LoadLibrary (g_LibFileName) g_i_DLL;면 (== NULL을) g_i_DLL

돌아 거짓;(GetFunctionAdress (g_i_DLL) == false를)

돌아 거짓;

)

반환 사실;

)//------------------------------------------------ ---------------------------bool GetFunctionAdress (HINSTANCE h_module)

(

면 (== NULL을) h_module

돌아 거짓;g_CAN_Init = (PCAN_Init) GetProcAddress를 (h_module, "CAN_Init");면 (== NULL을) g_CAN_Init

돌아 거짓;g_CAN_Close = (PCAN_Close) GetProcAddress를 (h_module, "CAN_Close");면 (== NULL을) g_CAN_Close

돌아 거짓;g_CAN_Status = (PCAN_Status) GetProcAddress를 (h_module, "CAN_Status");(g_CAN_Status == NULL을)

돌아 거짓;g_CAN_Write = (PCAN_Write) GetProcAddress를 (h_module, "CAN_Write");면 (== NULL을) g_CAN_Write

돌아 거짓;g_CAN_Read = (PCAN_Read) GetProcAddress를 (h_module, "CAN_Read");

(g_CAN_Read == NULL을)

돌아 거짓;g_CAN_VersionInfo = (PCAN_VersionInfo) GetProcAddress를 (h_module, "CAN_VersionInfo");

(g_CAN_VersionInfo == NULL을 경우)

돌아 거짓;반환 사실;

)//------------------------------------------------ ---------------------------무효 __fastcall Close_can (TObject * 발신자)

(

만약 () g_i_DLL

(

FreeLibrary () g_i_DLL;

= NULL을 g_i_DLL;

g_CAN_Init =이 NULL;

g_CAN_Close =이 NULL;

g_CAN_Status =이 NULL;

g_CAN_Write =이 NULL;

g_CAN_Read =이 NULL;

g_CAN_VersionInfo =이 NULL;

)

)//------------------------------------------------ ---------------------------

 
또한 정적, *. dll 파일의 실제 경로에 있어야한다 연결합니다.대부분의
*. exe를 디렉토리에있는 곳으로 간단 해요, 설치 자주 system32에 넣을.

 
btbass,
귀하의 코드 샘플을 가져 주셔서 감사합니다 (나도) 볼랜드 빌더를 사용합니다.나는 내 사업에 처음으로 pcan_usb.dll를 사용하고있습니다.

난 당신이 나에게 조언을 줄 수있는 희망이 일부 문제가 건너 왔어요.내 사용자 중 일부는 내 응용 프로그램의 여러 세션을 엽니다.나는을위한 두 가지 프로그램을 동시에 의사 소통을 PeakCan 동글 그게 가능하지
건 알지만,이 사용자는 PeakCan 사용하지 않는 경우, 그들은 다른 것들에 대한 프로그램을 사용하고있습니다.

불행히도 언제, 정적, 발사하지 않을 내 응용 프로그램의 두 번째 인스턴스를 사용하여 연결과 pcan_usb.dll.제대로 초기화하지 못했습니다 0xC0000142 오류 "응용 프로그램이있습니다."내가이 프로젝트에 정적으로 연결, 그리고 그들이 날 문제가주지 않는 다른 DLL을 사용합니다.

그래서 난, 당신의 예를보고하고 여러분의 코드를 사용하여 dll 파일을 동적으로 연결하는 노력하기로했다.내 응용 프로그램의 2 부 시작 할 수있어이 시간,하지만 그렇게되면 전화 InitCan
두 번째 인스턴스 ()에서, 난 로드할 수없습니다라는 오류 메시지가 "필수 파일 'PCAN_USB.DLL 얻는 건 뭐지?"전까지는 사용자가 실제로는 두 번째 인스턴스에 액세스하려고 PeakCan 동글 (이 날 위해 일하는 것입니다, 오류)가 발생하지 않습니다.

경우에는 그것을 방지 PCAN_USB.DLL에서 뭔가를 로드할 수있다면 다른 프로그램이 이미 장전하지만
난 궁금해서 알아?나는 그것을 설계에 의해 그렇게 두 가지 프로그램을 동시에 PeakCan 동글 액세스를 시도하지 않습니다 이구나.난 단지와 dll 파일에서이 문제를 본 적이 전에 당신이 그것에 어떤 빛을 sheld 수있을 거라고 기대했다.

당신이 도움을 주셔서 감사합니다.

 
그러나 저는 될 수있는 USB 드라이버를 함께 할 확신할 수 없다고?
그것은 이미 첫 번째 인스턴스에 의해 통제되고있는이 프로그램은 다른 프로그램에서 오류가 발생하면 같은 USB 장치에 액세스하려고 동글은 USB 포트를 사용하여, 수도에 연결됩니다.
두 dongles 시도 해 봤나?그럼 열거 각 프로그램에 대해 하나의 USB 동글을 할당할 수도있습니다.

난 비주얼 스튜디오와
C # 지금은 함께 일하고있습니다.를 사용하여. NET 어셈블리 너무 쉽습니다 및 C # 꽤 멋진 언어입니다.

 
btbass,
답장을 보내주셔서 감사합니다.좀 더 많은 테스트를했고, 실제로 호출에 실패하여 LoadLibrary ( "PCAN_USB.DLL").나는 그것이 g_CAN_Init에 () 함수가 실패 추측했다.어떤 속도로 봐선, 한번 단 하나의 USB 동글을 때 시스템에있다는 명백한 PCAN_USB.DLL 전용 메모리로 로드할 수있습니다.난 나만이이 사건을 테스트할 수없는 하나의 USB 동글을 더 이상 하나의 USB 동글니까.

그건 그렇고, 난
내 프로그램은 역동적이고 사용자가 지금 당장 시작할 수있는 연계 프로그램의 여러 인스턴스를 사용하여 작성합니다.그래서 난 가보죠뭐.

내가 VB.Net 함께 일을 좀하고 있어요,하지만 난 C의 토지에 # 아직은 모험을 감행하지 않았습니다.

 
창문에 담았던 그들의 시도라는 이름으로 폴더는 Windows \ system32에

 

Welcome to EDABoard.com

Sponsor

Back
Top