TA的每日心情 | 奋斗 2018-10-31 11:22 |
---|
签到天数: 62 天 连续签到: 1 天 [LV.6]测试旅长
|
Loadrunner中不能直接使用C#的dll,所以我先用C++封装了一个dll来调用C#的dll,但是将C++的这个dll用lr_load_dll加载到Loadrunner中后,运行到调用函数那一步时总是报错“mmdrv has encountered a problem and needs to close.”我的C#代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CSDll
{
public class Operater
{
public int TwoNum(char oper, int a, int b)
{
switch (oper)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return 0;
}
}
}
C++代码如下:
头文件:
#ifdef CPDLL_EXPORTS
#define CPDLL_API __declspec(dllexport)
#else
#define CPDLL_API __declspec(dllimport)
#endif
// 此类是从 CPDll.dll 导出的
class CPDLL_API CCPDll {
public:
CCPDll(void);
// TODO: 在此添加您的方法。
};
extern CPDLL_API int nCPDll;
CPDLL_API int fnCPDll(void);
extern "C" CPDLL_API int CP2Num(char,int,int);
CPP文件:
#include "stdafx.h"
#include "CPDll.h"
#using "CSDll.dll"
using namespace CSDll;
// 这是导出变量的一个示例
CPDLL_API int nCPDll=0;
// 这是导出函数的一个示例。
CPDLL_API int fnCPDll(void)
{
return 42;
}
CPDLL_API int CP2Num(char oper,int a,int b)
{
Operater ^opera=gcnew Operater();
int result=opera->TwoNum(oper,a,b);
return result;
}
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 CPDll.h
CCPDll::CCPDll()
{
return;
}
其中CP2Num函数是C#dll的封装,用lr_load_dll加载C++dll后,编译步暴挫,但是每次运行到CP2Num函数时就报错了mmdrv遇到问题。
PS:我用C++控制台程序按我C++dll中的方式调用C#的dll使用正常,但是在C++控制台程序用LoadLibrary调用C++封装后的dll,编译时则报错找不到CP2Num
各位知道的大虾们帮忙看看,十二分感谢!
|
|