Posted on 2008-07-15 21:26
CoderZh 阅读(4423)
评论(1) 编辑 收藏 所属分类:
性能测试 、
C/C++
LoadRunner里可以直接调用VC++的DLL,关于DLL基本的制作及调用请见:
http://www.cnblogs.com/coderzh/archive/2008/04/02/1135118.html
今天包装一个由开发写好的加密解模块,中间遇到不少问题,记录一下:
问题1: debug编的过,但运行时出现系统无法执行指定程序。。。release版本编不过(fatal error LNK1257: code generation
failed)
解决办法:安装VS2005的
SP1补丁(狂晕~~)
问题2:#pragma comment(lib, "zlibmdd.lib") 编译后出现:

解决办法:
1.
将xxx.lib拷贝到工程当前目录
2.
"Project" - "Propertites" - "Linker" - "Input" - "Additional Dependencies",把xxx.lib加进去
问题3:把开发的代码直接添加进工程后,编译,出现unexpected end of file while looking for precompiled hearder:

解决办法:找到出错的文件,右键
"Property" - "C/C++" - "Precompiled Headers" - "Create/Use Precompild Header",设置 "Not Using Precompiled Headers"
问题4:工程有的时候编译没问题,关闭后再打开时,编译出现_DllMain@12 already defined in MSVCRTD.lib(dllmain.obj):

解决办法:没有什么很好的解决办法,具体的原因不知。暂时使用下面的方法解决:
"Project" - "Propertites" - "Linker" -"Command Line" ,加入:"/FORCE:MULTIPLE" (注意:需要引号)
问题5:char* 与 wchar_t* 的转换
解决办法:使用
mbstowcs(wchar_t*转char*) 和
wcstombs(char* 转 wchar_t*
)
#include <stdlib.h>
#include <stdio.h>
void main( void )


{
int i;
char *pmbnull = NULL;
char *pmbhello = (char *)malloc( MB_CUR_MAX );
wchar_t *pwchello = L"Hi";
wchar_t *pwc = (wchar_t *)malloc( sizeof( wchar_t ));
printf( "Convert to multibyte string:\n" );
i = wcstombs( pmbhello, pwchello, MB_CUR_MAX );
printf( "\tCharacters converted: %u\n", i );
printf( "\tHex value of first" );
printf( " multibyte character: %#.4x\n\n", pmbhello );
printf( "Convert back to wide-character string:\n" );
i = mbstowcs( pwc, pmbhello, MB_CUR_MAX );
printf( "\tCharacters converted: %u\n", i );
printf( "\tHex value of first" );
printf( " wide character: %#.4x\n\n", pwc );
}
问题6:C++如何调用DLL
解决办法:详见
http://blog.csdn.net/huahua70528158/archive/2007/11/08/1872827.aspx
1. 隐式链接
#pragma comment(lib,"MyDll.lib")
extern "C"_declspec(dllimport) int Max(int a,int b);
#include
#include"Dlltest.h"
void main()


{
int c;
c=Max(1,2)
}
2. 显式链接
void main(void)


{
typedef int(*pMax)(int a,int b);
typedef int(*pMin)(int a,int b);
HINSTANCE hDLL;
PMax Max
HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;
Max=(pMax)GetProcAddress(hDLL,"Max");
A=Max(5,8);
Printf("比较的结果为%d\n",a);
FreeLibrary(hDLL);//卸载MyDll.dll文件;
}
问题7:C语言没有Dictionary,因此要返回Name,Value这样的键值对列表,采用返回两个数组的方式。需要使用到指针数组。
解决办法:指针数组使用示例
#include <stdio.h>

int main()


{

char *name[6] =
{"Rainer","Richie","Crystal","Stef","Sammy"};
//定义一个指针数组,并将其初始化。这时候name[0]将存储字符串"Rainer"的
//第一个字符'R'的地址,依此类推。
char *p;
//定义一个指向字符变量的指针变量
int i;
name[5] = "Jacky";
//将数组第六个元素赋值为"Jacky"
for(i = 0;i < 6;++i)

{//输出数组内容
p = *(name + i);
//name + i即为name[i],*name[i]即为数组name的第i个元素的值,
//即为第i个元素中字符串的首字符的地址
printf("%s ",p);
//注意格式字符串中的s
}
printf("\n");
return 0;
}