程序是基于对话框的MFC win32项目
头文件内容如下:
// InputMethodDemoDlg.h : 头文件
//#pragma once
#include "afxwin.h"
// CInputMethodDemoDlg 对话框
class CInputMethodDemoDlg : public CDialog
{
// 构造
public:
CInputMethodDemoDlg(CWnd* pParent = NULL); // 标准构造函数// 对话框数据
enum { IDD = IDD_INPUTMETHODDEMO_DIALOG }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon; // 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CEdit m_cEditMain;
CEdit m_cEditSelect;
BOOL CInputMethodDemoDlg::PreTranslateMessage(MSG * pMsg);
CEdit m_cEditInput;
CString m_strEditMain;
CString m_strEditSelect;
CString m_strEditInput;
struct CtrContent;
struct InContent;
int SearchWD(CString Content);
};cpp文件内容如下:
// InputMethodDemoDlg.cpp : 实现文件
//#include "stdafx.h"
#include "InputMethodDemo.h"
#include "InputMethodDemoDlg.h"
#include "iostream"
using namespace std;#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CInputMethodDemoDlg 对话框
struct CtrContent
{
CString name;
CString value;
};
CtrContent m_sCtrList[20];
struct InContent
{
CString letter; 
int Begin,End;
};
InContent m_Index[401];
CString m_strCode[6696];CInputMethodDemoDlg::CInputMethodDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CInputMethodDemoDlg::IDD, pParent)
, m_strEditMain(_T(""))
, m_strEditSelect(_T(""))
, m_strEditInput(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CInputMethodDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_cEditMain);
DDX_Control(pDX, IDC_EDIT2, m_cEditSelect);
DDX_Control(pDX, IDC_EDIT3, m_cEditInput);
DDX_Text(pDX, IDC_EDIT1, m_strEditMain);
DDX_Text(pDX, IDC_EDIT2, m_strEditSelect);
DDX_Text(pDX, IDC_EDIT3, m_strEditInput);
}BEGIN_MESSAGE_MAP(CInputMethodDemoDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// CInputMethodDemoDlg 消息处理程序BOOL CInputMethodDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
CString strBuf;
CFile m_CFile;
m_CFile.Open("ControlList.txt",CFile::modeRead);
CArchive Ct(& m_CFile,CArchive::load);
int i = 1;
while(Ct.ReadString(strBuf))
{
m_sCtrList[i].name = strBuf;
Ct.ReadString(strBuf);
m_sCtrList[i].value = strBuf;
i++;
}
Ct.Close();
m_CFile.Close();
m_CFile.Open("Index.txt",CFile::modeRead);
CArchive In(& m_CFile,CArchive::load);
i=1;
while(In.ReadString(strBuf))
{
m_Index[i].letter = strBuf;
In.ReadString(strBuf);
m_Index[i].Begin = atoi(strBuf);
In.ReadString(strBuf);
m_Index[i].End = atoi(strBuf);
}
In.Close();
m_CFile.Close();
m_CFile.Open("区位码.txt",CFile::modeRead);
CArchive Co(& m_CFile,CArchive::load);
i=1;
while(Co.ReadString(strBuf))
{
m_strCode[i] = strBuf;
i++;
}
return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CInputMethodDemoDlg::OnPaint() 
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CInputMethodDemoDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}int SearchWD(CString Content)
{
int pos = 1;
while(m_Index[pos].letter!=Content)
{
pos++;
}
if(pos>401)
{
return 0;
}
else
{
return (pos);
}
}BOOL CInputMethodDemoDlg::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message==WM_KEYUP)
{
UpdateData(1);
CString strBuf;
if((__toascii(pMsg->wParam)>64)&&(__toascii(pMsg->wParam)<91))
{
int pos ;
pos= SearchWD(m_strEditInput);
}
}
return(CDialog::PreTranslateMessage(pMsg));
}
如果不调用SearchWD函数程序可以通过编译,否则编译时说:
1、
InputMethodDemo error LNK2019: 无法解析的外部符号 "public: int __thiscall CInputMethodDemoDlg::SearchWD(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)" (?SearchWD@CInputMethodDemoDlg@@QAEHV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z) ,该符号在函数 "public: virtual int __thiscall CInputMethodDemoDlg::PreTranslateMessage(struct tagMSG *)" (?PreTranslateMessage@CInputMethodDemoDlg@@UAEHPAUtagMSG@@@Z) 中被引用2、
InputMethodDemo fatal error LNK1120: 1 个无法解析的外部命令到底出了什么问题呢?请各位高手告诉在下解决方法 谢谢

解决方案 »

  1.   

    int SearchWD(CString Content)
    -----------------------
    int CInputMethodDemoDlg::SearchWD(CString Content)
      

  2.   

    想问一下 
    1、如果要返回一个string串的某个位置起的字串有什么函数可以用呢?
    2、如果是CString呢?又有什么函数可以用 
    3、String跟string到底有什么不同 
    谢谢
      

  3.   

    string的解决了 用substr 但是CString 的还没找到 各位请帮忙
      

  4.   

    还有:basic_string和string有什么区别 怎么转换?