51Testing软件测试论坛

标题: Loadrunner中使用C#的dll问题 [打印本页]

作者: xinyuzxx    时间: 2015-11-30 14:16
标题: Loadrunner中使用C#的dll问题
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


各位知道的大虾们帮忙看看,十二分感谢!

作者: xinyuzxx    时间: 2015-11-30 14:55
自己顶,各位帮帮忙!
作者: xinyuzxx    时间: 2015-12-1 09:02
还在等,大神们帮帮忙




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2