`
mmdev
  • 浏览: 13329178 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

关于VS2005与EVC4.2的项目开发过程中的问题点滴

 
阅读更多

这段时间一直致力于嵌入式IOServer与嵌入式HMI的开发,这中间及牵扯C#与EVC通信的问题,也牵扯EVC本身开发遇到的一些问题。

1、EVC与C#数据传递

我是用EVC做DLL(MFC 扩展DLL),C#直接调用。

这是EVC DLL的接口

DLLEXPORT long WINAPI IOMReadData(LPTSTR,LPTSTR); //读内存数据 变量名称 数据
DLLEXPORT long WINAPI IOMWriteData(LPTSTR,LPTSTR); //写内存数据 变量名称

这是C#的接口声明

[DllImport(@"/Storage Card/YFIOES.dll")]
public static extern int IOMReadData(string strName, StringBuilder strData);
[DllImport(@"/Storage Card/YFIOES.dll")]
public static extern int IOMWriteData(string strName, string strData);

这里面遇到几个有意思的问题:对于字符串类型一直是数据传递的问题频发地带,在EVC接口中声明CString 与 CString & 接口时发现字符串能传递下去,可是返不回来,声明成LPTSTR类型,发现如果C#接口为string ,则messagebox可以显示该字符串,但是传递到textbox控件中则为空,声明为StringBuilder则就没有任何问题。

这里有一个需要注意的问题:当返回的字符串大于16个字长度时,如下声明StringBuilder strData=new StringBuilder(); 要修改为StringBuilder strData=new StringBuilder(255); 否则会报错,我就是在这个问题上调试了半天,我还以为我的DLL出问题了呢。

2、EVC与INI文件

在EVC中是不支持INI读写的API的,幸好有网络,查了一个,还挺好使。

DWORD CYFIOMEM::GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName )
{

CFile iniFile;
PBYTE pFileBuf;
CString szBuf;
DWORD dwLength;

if( lpReturnedString == NULL )return 0;
if( lpDefault ) {_tcscpy( lpReturnedString,lpDefault ); }
else {_tcscpy( lpReturnedString,TEXT( "/0" )); }

if (lpFileName == NULL ){return _tcslen( lpReturnedString );}
if(!iniFile.Open(lpFileName, CFile::modeRead)) {return _tcslen( lpReturnedString );}

dwLength = iniFile.GetLength();
if (dwLength == 0) { return _tcslen( lpReturnedString );}
pFileBuf = new BYTE[dwLength + 2];
if (pFileBuf == NULL) { return _tcslen( lpReturnedString );}

memset(pFileBuf, 0x0, dwLength + 2);
iniFile.Read((void *)pFileBuf, dwLength);
iniFile.Close();

if (pFileBuf[0] == 0xFF && pFileBuf[1] == 0xFE) {szBuf = (LPCWSTR)(pFileBuf + 2);}
else
{
PTCHAR pszWideChar = new TCHAR[dwLength + 1];
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pFileBuf, dwLength, pszWideChar, dwLength);
szBuf = pszWideChar;
delete pszWideChar;
}
delete pFileBuf;

while (1)
{
CString szTemp;
int nPos;
if (szBuf.IsEmpty()) return _tcslen( lpReturnedString );

nPos = szBuf.FindOneOf(TEXT("/r/n"));
if (nPos == -1)
{
szTemp = szBuf;
szBuf.Empty();
}
else
{
szTemp = szBuf.Left(nPos);
szBuf = szBuf.Right(szBuf.GetLength() - nPos);
szBuf.TrimLeft(TEXT("/r/n"));
}
szTemp.TrimLeft(TEXT("/t "));
szTemp.TrimRight(TEXT("/t "));
if (szTemp.GetAt(0) == TEXT('[') && szTemp.GetAt(szTemp.GetLength() - 1) == TEXT(']'))
{
szTemp = szTemp.Right(szTemp.GetLength() - 1);
szTemp = szTemp.Left(szTemp.GetLength() - 1);
if (lpAppName == NULL)
{
return _tcslen( lpReturnedString );
}
else if (szTemp.CompareNoCase(lpAppName) == 0)
{
while (1)
{
if (szBuf.IsEmpty()) {continue; }
nPos = szBuf.FindOneOf(TEXT("/r/n"));
if (nPos == -1)
{
szTemp = szBuf;
szBuf.Empty();
}
else
{
szTemp = szBuf.Left(nPos);
szBuf = szBuf.Right(szBuf.GetLength() - nPos);
szBuf.TrimLeft(TEXT("/r/n"));
}

nPos = szTemp.Find(TEXT("="));
if (nPos == -1) {return _tcslen( lpReturnedString );}

CString szTemp1;
szTemp1 = szTemp.Left(nPos);
szTemp1.TrimLeft(TEXT("/t "));
szTemp1.TrimRight(TEXT("/t "));
if (lpKeyName == NULL) {return _tcslen( lpReturnedString );}
else if (szTemp1.CompareNoCase(lpKeyName) == 0)
{
szTemp1 = szTemp.Right(szTemp.GetLength() - nPos - 1);
szTemp1.TrimLeft(TEXT("/t "));
szTemp1.TrimRight(TEXT("/t "));
_tcscpy( lpReturnedString,szTemp1 );

return _tcslen( lpReturnedString );
}
}
}
}
}
return _tcslen( lpReturnedString );
}

3、在EVC中宽字符是我最头疼的,建议最好多用CString,能有效回避该问题。

在开发过程中一定还会遇到各种各样的问题,有时间再一一写来... ...

分享到:
评论

相关推荐

    MC 1000 CE4.2开发包for EVC 4.0.rar

    《MC 1000 CE4.2开发包for EVC 4.0》是一款针对Microsoft Windows CE(简称CE)4.2版本的嵌入式开发工具,特别为EVC(Embedded Visual C++)4.0环境设计。该开发包旨在帮助开发者在EVC 4.0环境下构建、调试和优化...

    EVC VS2005

    本文档将详细介绍如何将EVC项目转换到VS2005,并针对转换过程中可能出现的问题提供解决方案。 #### 二、菜单栏(Menu Bar)的转换 在EVC中,菜单栏的定义通常位于RC文件中。而在VS2005中,为了更好地管理和组织资源,...

    EVC转换为vs 2005(vs 2008)

    转换过程中可能会遇到各种问题,但通过仔细规划、深入理解EVC和VS 2005/2008的差异,以及充分的测试,开发者可以成功地将项目迁移到新的开发环境中。这不仅可以使项目受益于新IDE的增强功能,也有助于团队适应不断...

    EVC工程移植到VS2005的经验

    本文主要讨论的是将使用EVC(eMbedded Visual C++)开发的工程移植到Visual Studio 2005的过程,这对于那些希望升级项目或利用新工具集功能的开发者来说非常有用。 1. **移植步骤与注意事项** - 在开始移植前,...

    VS2005/EVC 助手 visual Assist X 10.4

    visual Assist X 10.4配合注册机已经上传。应经测试可以使用

    VS2005软件开发说明文档

    - **安装过程**:首先需要下载并安装VS2005 IDE,安装过程中可以选择所需的语言开发工具,如C#、VB.NET或C++。 - **创建HelloWorld实例**:无论是使用C#、VB.NET还是C++,创建HelloWorld实例的基本步骤相似: - ...

    evc 转换到 vs2005的若干问题

    ### evc转换到vs2005的若干问题 #### 概述 本文主要讨论了从eMbedded Visual C++ (简称EVC)到Visual Studio 2005的代码迁移过程中遇到的一系列问题及解决方案。对于从事嵌入式开发的工程师来说,将旧项目从EVC迁移...

    EVC 开发工具 word

    在实际教学中,通过项目2——PDA的启动过程,学生将学习如何导出SDK,使用EVC进行开发。这一过程中,包括: 1. 导入BSP包,理解其作用并进行配置。 2. 编译内核生成nk.bin,了解嵌入式系统的启动流程。 3. 编译SDK...

    EVC入门

    4. **参与社区**:加入嵌入式开发论坛或社区,与其他开发者交流经验,解决问题。 5. **阅读相关书籍**:市场上有许多关于EVC和Windows CE开发的书籍,挑选一本适合自己的进行深入学习。 总之,EVC作为一款经典的...

    EVC++开发实例,很快上手EVC开发

    通过压缩包中的“EVC开发实例”,你可以逐步学习如何创建新项目、添加源文件、配置编译选项、调试程序等基本操作,进而掌握如何利用EVC++开发出符合需求的嵌入式应用程序。实例教程通常会涵盖从简单的“Hello, World...

    在WCE4.2下面用EVC开发的一个带图型界面的音乐播放器,带音乐播放的一般功能,如快进快退,拖动,音量拖动调节

    8. **调试与测试**: 开发过程中,调试是必不可少的环节。EVC提供了一个模拟器和设备调试工具,帮助开发者找出并修复代码中的问题。 9. **资源管理**: 对于音乐文件的读取和播放,需要考虑内存管理,避免内存泄漏,...

    EVC图形编程开发源代码

    在EVC图形编程开发源代码的集合中,我们可以期待找到各种示例代码,这些代码展示了如何利用EVC的图形功能来实现特定的效果或功能,比如窗口管理、图像加载与显示、动画制作等。 "范例"或"实例"是学习编程的重要资源...

    WinCE Button XP 风格 CButtonST VS2005 EVC

    在Windows CE平台上开发应用程序时,有时我们希望实现与Windows XP类似的按钮样式,以提供更美观的用户界面。...在实际开发过程中,可以根据`CCeButtonST_demo.zip`中的示例代码调整和优化,以适应你的项目需求。

    贪吃蛇 EVC版本 源码

    【贪吃蛇 EVC版本 源码】是一款基于EVC4.2(Embedded Visual C++ 4.2)开发的编程项目,适用于Windows CE操作系统。这个源码程序旨在实现经典的“贪吃蛇”游戏,它可以在基于ARM9处理器如S3C2440的硬件平台上运行。...

    EVC开发小例子(源码)

    **EVC开发小例子(源码)** 这个程序示例主要展示了如何利用EVC(Embedded Visual C++)4.0进行开发,特别是针对SQL Server Compact Edition(SQLCE)的数据库操作。EVC4.0是微软为Windows CE平台提供的一款嵌入式...

    EVC高级编程及其应用开发

    1. **集成开发环境**: EVC提供了一个完整的开发环境,包括源代码编辑器、项目管理器、资源编辑器和调试器等工具,使得开发过程更为高效。 2. **C++支持**: EVC支持标准C++,并针对Windows CE进行了优化,使得开发者...

    打印源程序evc,嵌入式开发

    在EVC项目中,"PrintTestDlg"可能是源代码中的一个C++类,继承自MFC(Microsoft Foundation Classes)的CDialog,包含了与打印相关的控件和函数。开发者可能会在这个类中定义处理用户输入、调用打印API和管理打印...

    EVC下tcp程序开发

    通过查看和分析这些文件,你可以更深入地理解EVC中TCP程序的开发过程。 总之,EVC为嵌入式系统的TCP程序开发提供了便利的工具。掌握CAsyncSocket类的使用方法,理解TCP协议的工作原理,是成功开发TCP程序的关键。...

    EVC高级编程及其应用开发(2)(04-09)(共三卷)

    通过这卷书籍的学习,开发者将能够掌握更高级的EVC编程技巧,理解并解决实际开发中遇到的问题,从而在嵌入式系统开发领域更上一层楼。配合其他两卷的阅读,能形成一个完整的知识体系,全面了解和精通EVC高级编程及其...

    VS2005/EVC助手 visual Assist 10.4X 注册机

    visual Assist X 注册 10.4版已经测试过了。 可以正常使用10.4版本的。助手也上穿了。

Global site tag (gtag.js) - Google Analytics