文件如下:
问题:
为什么data(int类型)可以共享,而a(char*类型)却会出问题呢?谢谢
1)a:dll的文件SharedDLL.cpp:
/---------------------------------------------------------------------------

#pragma option -zRSHSEG
#pragma option -zTSHCLASS
#include <vcl.h>
#include <windows.h>
#include "SharedDll.h"
#pragma hdrstop

#pragma argsused
int data = 99;
char* a="我是OK!.....................";
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
        return 1;
}
//---------------------------------------------------------------------------

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
   return 1;
}

extern int data;


void DLL_EXPORT SetData(char* x)
{
  a =x;
}

char* DLL_EXPORT GetData()
{
  return a;
}

int DLL_EXPORT GetDatad()
{
  return data;
}

void DLL_EXPORT SetDatad(int x)
{
  data =x;
}

//----------------------------------------------------
b:dll的文件SharedDll.h
#ifdef __DLL__
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

extern "C"
{
void DLL_EXPORT SetData(char* x);
char* DLL_EXPORT GetData();
void DLL_EXPORT SetDatad(int x);
int DLL_EXPORT GetDatad();
}
//--------------------------------------------------------------
c:dll的文件Shared.def:
LIBRARY SHAREDDLL

SEGMENTS
  SHSEG CLASS 'SHCLASS' SHARED


//--------------------------------------------------------------------
2)执行文件ddd.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ddd.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
HMODULE hModule;
char* x;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        hModule=LoadLibrary("de.dll");
        if(hModule==NULL)
        MessageBox(NULL,"导入DLL失败!","提示",MB_OK);        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        r=(B)GetProcAddress(hModule,"_GetData");
        //x=&e();
        Edit1->Text=r();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        e=(A)GetProcAddress(hModule,"_SetData");
        e(Edit2->Text.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        FreeLibrary(hModule);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
        k=(D)GetProcAddress(hModule,"_GetDatad");
        //x=&e();
        Edit1->Text=IntToStr(k());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
        o=(C)GetProcAddress(hModule,"_SetDatad");
        o(StrToInt(Edit2->Text));
}
//---------------------------------------------------------------------------



//ddd.文件
//---------------------------------------------------------------------------

#ifndef dddH
#define dddH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <windows.h>
extern "C" __declspec(dllimport) void SetData(char* x);
extern "C" __declspec(dllimport) char* GetData();
extern "C" __declspec(dllimport) void SetDatad(int x);
extern "C" __declspec(dllimport) int GetDatad();
typedef void (*A)(char*);
typedef char*(*B)();
typedef void (*C)(int);
typedef int(*D)();
A e;
B r;
C o;
D k;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TEdit *Edit2;
        TButton *Button1;
        TButton *Button2;
        TButton *Button3;
        TButton *Button4;
        TButton *Button5;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif