| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 604 人关注过本帖, 1 人收藏
标题:关于C#调用dll的问题
只看楼主 加入收藏
gamezjs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-10
收藏(1)
 问题点数:0 回复次数:4 
关于C#调用dll的问题
别人给我的一个DLL文件,是用C做的,我想调用这个dll,我把这个文件放在system32下,是不是可以直接在程序中调用啊,函数声明如下:
// 参数说明:
//        lpsMeterNum        传入表号
//        lpsFactoryCode    传入厂家编号
//        nChannel        通道号
//        lpsType            集中器类型
//        pMeterData        表数据
// 返回值: 操作成功返0,失败返回相应错误码
DLLEXPORT int    ReadMeterData(LPTSTR lpsMeterNum, LPTSTR lpsFactoryCode, int nChannel, LPTSTR lpsType, lpMeterData pMeterData);

/**
 *  抄表获取数据的结构
**/
typedef struct tagMETERDATA
{
    float    m_fSumCold,        //累计冷量
            m_fCurHeat,        //当前热量
            m_fHeatPower,    //热功率
            m_fFlowV,        //流速
            m_fSumFlow,        //累计流量
            m_fSupWaterT,    //供水温度
            m_fBackWaterT;    //回水温度
    int        m_nRunTime;        //运行时间
    CString    m_strMeterTime;    //表时间
}MeterData, *lpMeterData;
以下为我自己编写的C#代码:
程序代码:
[DllImport(".//corma.dll", EntryPoint = "ReadMeterData")]
        public static extern int ReadMeterData(string MeterNum, string FactoryCode, int Channel, string Type,lpmeterdata a);
        private SerialPort comm = new SerialPort();
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string MeterNum = "12345678";
            string FactoryCode = "1";
            int Channel = 1;
            string Type = "S型";
            float SumCold, CurHeat, HeatPower, FlowV, SumFlow, SupWaterT, BackWaterT;
            int RunTime;
            string MeterTime;
            lpmeterdata b=new lpmeterdata();
            int result=ReadMeterData(MeterNum,FactoryCode,Channel,Type,b);
            if (result == 0)
            {
                MessageBox.Show("抄表成功");
            }
            else
            {
                MessageBox.Show("抄表失败");
            }
可是我断点查看的时候,result的值为1,我不知道是不是我写的哪里有问题?请各位大大帮忙看下
2012-10-29 15:56
gamezjs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-10
收藏
得分:0 
没办法解决吗?还是我写的不对,大家看不懂,急啊!在线等。
2012-10-30 08:16
gamezjs
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-10
收藏
得分:0 
想要调用C程序做的dll文件(应该是非托管的),是不是只要把dll文件放到system32下就可以了,在调用的时候直接用DllImport(".//corma.dll")]就可以了。
2012-10-30 09:56
ccn294609235
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2012-11-6
收藏
得分:0 
楼上的和我意见一致。
2012-11-06 11:37
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
using System.Runtime.InteropServices;

[StructLayoutAttribute(LayoutKind.Sequential)]
public struct tagMETERDATA {
    /// float
    public float m_fSumCold;
    /// float
    public float m_fCurHeat;
    /// float
    public float m_fHeatPower;
    /// float
    public float m_fFlowV;
    /// float
    public float m_fSumFlow;
    /// float
    public float m_fSupWaterT;
    /// float
    public float m_fBackWaterT;
    /// int
    public int m_nRunTime;
    /// char*
    [MarshalAsAttribute(UnmanagedType.LPStr)]
    public string m_strMeterTime;
}

public partial class NativeMethods {
    ///Return Type: int
    ///lpsMeterNum: LPTSTR->LPWSTR->WCHAR*
    ///lpsFactoryCode: LPTSTR->LPWSTR->WCHAR*
    ///nChannel: int
    ///lpsType: LPTSTR->LPWSTR->WCHAR*
    ///pMeterData: lpMeterData->tagMETERDATA*
    [DllImportAttribute(".//corma.dll", EntryPoint="ReadMeterData")]
    public static extern  int ReadMeterData(
        [MarshalAsAttribute(UnmanagedType.LPWStr)] System.Text.StringBuilder lpsMeterNum,
        [MarshalAsAttribute(UnmanagedType.LPWStr)] System.Text.StringBuilder lpsFactoryCode,
        int nChannel,
        [MarshalAsAttribute(UnmanagedType.LPWStr)] System.Text.StringBuilder lpsType,
        ref tagMETERDATA pMeterData
    ) ;
}

[ 本帖最后由 303770957 于 2013-6-25 17:45 编辑 ]

♂ 死后定当长眠,生前何须久睡。♀
2013-06-25 17:43
快速回复:关于C#调用dll的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017208 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved