自己写了一个DLL,在测试DLL的时候调用DLL里面的类出错!!
错误如下:
Linking...
TestMyDllDlg.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall CMyStoreScu::SendFile(char *)" (__imp_?SendFile@CMyStoreScu@@QAEHPAD@Z)
Debug/TestMyDll.exe : fatal error LNK1120: 1 unresolved externals
是不是DLL写的有问题???
还是调用方法错误???
调用的代码如下: CMyStoreScu mystore;
DWORD dwVersionNeed=MAKEWORD(1,1);
char *pHostName,*pHostNamePeer;
WSADATA wsadata;
mystore.Init(dwVersionNeed,&wsadata);
mystore.InitializeNetwork();
mystore.CreateAssociationParameters(100);
pHostName=mystore.GetLocalHostName();
pHostNamePeer=pHostName;
mystore.SetPresentationAddress(pHostName,pHostNamePeer);
if(!mystore.ConnectToSCP())
{
return;
}
mystore.SendFile("1.dcm");
包含了相应的头文件和连接了LIB库!!!
怎么回事??
望高手帮解决!谢谢!说详细点!!!!!

解决方案 »

  1.   

    LIB文件的路径没有设置正确。拷贝一个LIB到你的工程目录下来。
      

  2.   

    恩,很可能是lib文件没有正确被载入的问题
    你再看看,你在调用时候导出头和导入头的代码写对了吗?
    相关函数名称是否一致?
      

  3.   

    #pragma comment(lib,"MyDcmtk.lib")
    我吧LIB库拷到了,工程目录下面!!!!
    还有DLL也考到了该工程目录下面!!
      

  4.   

    #ifdef MYDCMTK_EXPORTS
    #define MYDCMTK_API  __declspec(dllexport)
    #else
    #define MYDCMTK_API  __declspec(dllimport)
    #endifclass MYDCMTK_API CMyStoreScu  
    {
    public:
    CMyStoreScu();
    virtual ~CMyStoreScu();
    BOOL Init(DWORD dwVersion,LPWSADATA pWsaData);
    BOOL InitializeNetwork();//初始化网络 
    BOOL CreateAssociationParameters(long MaxPDULength);//创建关联参数
    BOOL SetAppTitle(const char *pszOurTitle,//设置AE标题 
    const char *pszPeerTitle,
    const char *pszrespondingAPTitle);
    char * GetLocalHostName();//获取本地主机名
    BOOL SetPresentationAddress(const char *pszHostName,const char *pszPeerHost);//添加地址信息
    BOOL AddPresentationContext(T_ASC_PresentationContextID presentationContextID,
    const char* abstractSyntax,
    const char* transferSyntaxList[],
    int transferSyntaxListCount,
    T_ASC_SC_ROLE proposedRole = ASC_SC_ROLE_DEFAULT);//加入额外信息
    BOOL ConnectToSCP();
    BOOL SendFile(char *pFileName);
    private:
    //data
    T_ASC_Parameters *m_params;
    T_ASC_Network *m_Net;
    T_ASC_Association *m_Assoc;
    //method
    BOOL StoreSCU(char *szFileName);
    DcmFileFormat LoadFile(char *szFileName);
    void ReleaseAssociation();
    void DestroyAssociation();
    void DropNetwork();};
    这是我DLL工程里面的代码,请看看,有什么问题??
    对DLL还不是很熟悉!!!!
      

  5.   

    你的DLL里面有定义MYDCMTK_EXPORTS这个宏吗?  还有实在不行可以改成扩展DLL试试.
      

  6.   

      定义了预编译宏MYDCMTK_EXPORTS 没有?
      

  7.   

    这是个WIN32 DYNAMIC LINK LIBRARY
    ,MYDCMTK_EXPORTS 在哪个文件中定义??
      

  8.   

    在哪里定义啊 ??????????????我是一个WIN 32 DYNAMIC LIBRARY LINK!!!!!
    在哪里定义??
      

  9.   

    在 Project->Settings...->C/C++ ->Preprocessor definitions下面。
      

  10.   

    直接在你的类的声明上面定义就OK了。
    #define MYDCMTK_EXPORTS
      

  11.   

    错了,最好不要在上面定义,不然导出头文件还要去掉麻烦,就是stdafx.h定义,或者在预编译选项里面添加这个宏
      

  12.   

    只要保证在DLL定义这个宏,而在你的应用程序不能定义这个宏就OK。
      

  13.   

    如果在创建DLL项目时勾选了导出符号,VC会自动生成这些定义,不需要自己处理。
    如果你生成exe时只有这一个错误,应该是h文件与lib文件版本不匹配,重新生成DLL项目,把h文件和lib文件复制过来就可以了。