2015-01-14 4 views
0

내 프로젝트를 다른 응용 프로그램에 사용될 DLL에 연결해야합니다. 내 프로젝트는 DLL에서 구조체를 읽고 변수의 값을 변경하고 구조체를 DLL로 반환해야합니다. | 내가 구성 속성에 DBase.lib을 추가 한.h .lib 및 .dll 연결하기

#ifndef DBASE_H 
#define DBASE_H 

    typedef signed char L1; 
    typedef short int I2; 
    typedef int I4; 
    typedef float R4; 

    #pragma pack(1) 
    typedef struct _DBASESTRUT {.......} DBASESTRUT; 
    #pragma pack() 

    #ifdef __cplusplus 
    extern "C"{ 
    #endif 
     __declspec(dllimport) extern DBASESTRUT DBASE; 
    #ifdef __cplusplus 
    } 
    #endif 

#endif 

:

내 .ccp

#include "stdafx.h" 
#include <iostream> 
#include "dbase.h" 

#pragma comment(lib, "DBase.lib") 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int a; 
    cout << DBASE.IHMI[1] << "\n"; 
    //DBASE.IHMI[1] = 22; 
    cin >> a; 
    return 0; 
} 

이며,이 내 .H입니다 링커 | 입력 | 추가 종속성 및 구성 속성에 대한 dll 디렉터리 | VC++ 디렉토리 | 라이브러리 디렉토리

내 문제는 다른 응용 프로그램에서 IHMI [1] 값을 수정 한 다음이 프로그램을 사용하여 읽을 때 초기화되지 않은 값 (0)을 읽습니다.

어떤 조언이 있으십니까? dll과 프로그램이 제대로 작동합니까?

참고 : dll은 프로젝트와 다른 폴더에 있습니다. 다른 파일 (.ccp, .h 및 .lib)은 프로젝트 폴더의 같은 폴더에 있습니다.

NOTE2 : 나는 MVS2013 사용하고 -

C++ Win32 콘솔 응용 프로그램 대단히 감사합니다!

+0

두 응용 프로그램은 각각 DLL과 별도의 별도의 데이터 영역을 갖습니다. 당신은 explictyl 데이터를 공유로 표시해야합니다. –

+1

모든 것이 정상이지만 Dll이 어떻게 작동하는지 이해할 수 없습니다. 서로 다른 프로세스에서 실행되는 Dll의 두 인스턴스 간에는 아무런 관련이 없습니다. 파일에 제정신이 필요하거나 프로세스 간 통신을 사용해야합니다. –

+0

[Codeproject] (http://www.codeproject.com/Articles/240/How-to-share-a-data-segment-in-a-DLL)에는 데이터 공유의 예가 있습니다. 그러나이 접근법에는 많은 문제점이 있으며 IPC의 일부 형태가 선호됩니다. –

답변

0

감사합니다. 문제를 해결했다고 생각합니다. 구성 등록 정보에 dll 경로를 추가했습니다. 디버깅 | 환경 PATH = C : \ where \ is_the \ dll; % PATH % 필자는 프로그램과 응용 프로그램을 사용하여 동일한 구조체를 작성하고 읽고 있다고 확신합니다.

관련 문제