打印

万元求一个DEMO程序(北京)

[复制链接]
3301|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ysdx|  楼主 | 2008-6-18 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
demo, TE, IO, ST, AD
手头有一个PCI通讯板卡。有DLL驱动。测试DEMO原来是VC环境下。现在要改成c#环境。这里面涉及到C#如何调用原来DLL的API函数问题。任务单一:就是把原来的VC环境的demo程序用C#写。下面是VC环境的DEMO程序。
// Test_pcitio.cpp
//
// Generated by DriverWizard version DriverStudio 2.7.0 (Build 562)
//
// This console application demonstrates how to open a handle
// to a device in your driver, and communicate with the driver
// using Read, Write, and DeviceIoControl calls, as appropriate.
//
// This test program attempts to open the device using the
// GUID defined in "..PcitioDeviceinterface.h"

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>


#include <winioctl.h>
#include "..pcitioioctl.h"

#include "..PcitioDeviceinterface.h"    // Has class GUID definition




// This function is found in module OpenByIntf.cpp
HANDLE OpenByInterface(GUID* pClassGuid, DWORD instance, PDWORD pError);

typedef void VOIDFUNC();

HANDLE h,IOWaiter, hEvent;
// Prototypes
void Usage(void);
void ShowIoctlValues(void);

//    TODO:
//        You can redefine the IOCTL handler prototypes as needed, adding
//        appropriate parameters that can be collected from the command line.
//        To do this you must modify the command line parsing logic.  An
//        example of this is shown in comments throughout the test application.
//
//=== Parameterized IOCTL Example ===
// void Test_IOCTL_PARAMETERIZED(int nVal, ULONG dwVal);
//void Test_PCITIO_IOCTL_DMAHEADADD(ULONG mode);
//ULONG Test_PCITIO_IOCTL_INTCSR(ULONG seldelay,ULONG selstart,ULONG selend,ULONG selindex,ULONG done);
ULONG Test_PCITIO_IOCTL_DMABYTES(ULONG add,ULONG data);
void Test_PCITIO_IOCTL_DMAREAD(void);
void Test_PCITIO_IOCTL_DMAWRITE(void);
/*ULONG startout(ULONG delaynum,ULONG startaddress,
                ULONG endaddress,ULONG indexaddress
                ,ULONG channelnum);
                */
//void writesize(ULONG x,ULONG y);
//void writebuf(ULONG address,BYTE data);

void CloseIfOpen(void);


// Global data
void    ReadOne();
void    WriteOne();
void    Read();
void    Write();

    long  i =  0;
    int  tp =0;
    ULONG    *wrbuf;
    BYTE  *wrrbuf;
    BYTE  *ttfbuf;
    ULONG    *wrfilebuf;
    BYTE  *membuf;
    long start=0;
    long kk=0;
    ULONG chang,kuan;

    //全局缓冲区,就是你们应用程序的内存缓冲区
    //现申请大小512M字节,可以修改大小

#define N_IOCODES    6

// Names of IOCTL codes
//
char *IOnames[N_IOCODES+1] =
{

//=== Parameterized IOCTL Example ===
//    "IOCTL_PARAMETERIZED",
    "PCITIO_IOCTL_DMAHEADADD",
    "PCITIO_IOCTL_INTCSR",
    "PCITIO_IOCTL_DMABYTES",
    "PCITIO_IOCTL_SETEVENT",
    "PCITIO_IOCTL_DMAREAD",
    "PCITIO_IOCTL_DMAWRITE",
    ""
};

// IOCTL codes
//
int IOcodes[N_IOCODES+1] =
{

//=== Parameterized IOCTL Example ===
//    IOCTL_PARAMETERIZED,
    PCITIO_IOCTL_DMAHEADADD,
    PCITIO_IOCTL_INTCSR,
    PCITIO_IOCTL_DMABYTES,
    PCITIO_IOCTL_SETEVENT,
    PCITIO_IOCTL_DMAREAD,
    PCITIO_IOCTL_DMAWRITE,
    0
};


// Handle to device opened in driver.
//
HANDLE    hDevice = INVALID_HANDLE_VALUE;

// Class GUID used to open device
//
GUID ClassGuid = PcitioDevice_CLASS_GUID;



//dll function declare start
typedef BOOL (/*_stdcall*/ *TDMAHEADADD)(ULONG mode);//void Test_PCITIO_IOCTL_DMAHEADADD(ULONG mode)
TDMAHEADADD DmaAdd;

typedef ULONG (*TDMABYTES)(ULONG add,ULONG data);//ULONG Test_PCITIO_IOCTL_DMABYTES(ULONG add,ULONG data)
TDMABYTES DmaBytes;

typedef ULONG (*TIOCTLINTCSR)(ULONG seldelay,ULONG selstart,ULONG selend,ULONG selindex,ULONG done);
TIOCTLINTCSR TestPciIntCSR;

typedef ULONG (*PStartout)(ULONG delaynum,ULONG startaddress,
                ULONG endaddress,ULONG indexaddress
                ,ULONG channelnum);
PStartout startout1;

typedef void (*PWriteSize)(ULONG x,ULONG y);
PWriteSize writesize;

typedef ULONG (*PWriteBuf)(ULONG address,BYTE data);
PWriteBuf writebuf;

typedef ULONG (*PTransData)(ULONG channelnum);
PTransData Transdata;


///dll end 
////////////////////////////////////////////////////////////////////////
// Exit
//
//        Print a message and exit
//
   void Exit(int res)
{
    printf("Exiting... ");
//    CloseIfOpen();//like
    CloseHandle(hDevice);
    CloseHandle(IOWaiter);
    exit(res);
}


////////////////////////////////////////////////////////////////////////
// Main entry point
//
//


int __cdecl main(int argc, char *argv[])
{
    int        nArgIncrement = 0;
    int jk=0;
    ULONG delaynum;
    ULONG startaddress;
    ULONG endaddress;
    ULONG indexaddress;
    ULONG channelnum;
    ULONG rp=0;
    char    line[256];
//=== Parameterized IOCTL Example ===
//    int        nVal;
//    ULONG    dwVal;
    long i;

    printf("Test application Test_pcitio starting... ");

    printf("input delaynumber (hex16 : 0 to 40): ");
    fgets(line, sizeof(line), stdin);
    sscanf (line, "%lx",&delaynum);
    printf("delay num is %lx ",delaynum);

    printf("input startnum (hex16 : 0 to 10000): ");
    fgets(line, sizeof(line), stdin);
    sscanf (line, "%lx",&startaddress);
    printf("start num is %lx ",startaddress);
    
    printf("input endnumber (hex16 : 0 to 1e400): ");
    fgets(line, sizeof(line), stdin);
    sscanf (line, "%lx",&endaddress);
    printf("end num is %lx ",endaddress);

    printf("input indexnumber (hex16 : 0 to ffff): ");
    fgets(line, sizeof(line), stdin);
    sscanf (line, "%lx",&indexaddress);
    printf("delay num is %lx ",indexaddress);

    printf("input channelnumber (hex16 : 0 to 2): ");
    printf("0 : 32, 1 : 48,2 : 64 : ");
    fgets(line, sizeof(line), stdin);
    sscanf (line, "%lx",&channelnum);
    printf("delay num is %lx ",channelnum);
/// 加载dll库
        HINSTANCE hInst;
    hInst=LoadLibrary("DllDevelop.dll");
    DmaAdd=(TDMAHEADADD)GetProcAddress(hInst,"Test_PCITIO_IOCTL_DMAHEADADD");
    DmaBytes=(TDMABYTES)GetProcAddress(hInst,"Test_PCITIO_IOCTL_DMABYTES");
    startout1=(PStartout)GetProcAddress(hInst,"startout");
    writesize=(PWriteSize)GetProcAddress(hInst,"writesize");
    writebuf=(PWriteBuf)GetProcAddress(hInst,"writebuf");
    Transdata=(PTransData)GetProcAddress(hInst,"Transdata");

   //以下为模拟应用程序操作,将文件全部信息,包含头内容
//填入缓冲区

    HANDLE hFile2 = NULL;
    if (hFile2==NULL)
    {
        hFile2 = CreateFile("TIFF26.BMP",           // open MYFILE.TXT 
                GENERIC_READ,              // open for reading 
                0,           // share for reading 
                NULL,                      // no security 
                OPEN_EXISTING,             // existing file only 
                FILE_ATTRIBUTE_NORMAL,     // normal file 
                NULL);                     // no attr. template 
    }    

//取得文件大小
    ULONG *filelengthhigh=0;
    ULONG filelength=GetFileSize(hFile2,filelengthhigh);
    printf("file length is %ld ",filelength);

    ttfbuf = (BYTE *) malloc(2048*1024);
        if (ttfbuf == NULL)
            {
        printf("Failed to allocate buffer for read");
        Exit(1);
            }

    ReadFile(hFile2,ttfbuf,0x3e, &rp, NULL);

// 需告诉长宽
    for (i=0;i<=0x3d;i++)
        {
    printf("%x",ttfbuf);
        }
    ULONG kuany = (ttfbuf[0x19]<<24)+(ttfbuf[0x18]<<16)+(ttfbuf[0x17]<<8)+ttfbuf[0x16];
    printf("  kuan is %ld ",kuany);

    ULONG changx = (ttfbuf[0x15]<<24)+(ttfbuf[0x14]<<16)+(ttfbuf[0x13]<<8)+ttfbuf[0x12];
    printf("chang is %ld ",changx);

    writesize(changx,kuany);

    ULONG dth=((filelength-0x3e)/(256*1024));
    ULONG dtp=(filelength-0x3e)-(dth*256*1024);
    long fg=0;
    for (long dr=0;dr<dth;dr++)
    {
      ReadFile(hFile2,ttfbuf,256*1024, &rp, NULL);
    for (fg=(dr*1024*256);fg<((dr+1)*1024*256);fg++)
    {
    writebuf(fg,ttfbuf[fg-(dr*1024*256)]);
    }
    }
    for (i=0;i<dtp;i++)
    {
      ReadFile(hFile2,ttfbuf,1, &rp, NULL);
    writebuf((fg+i),ttfbuf[0]);
    }


    //执行数据转换和发送到PCI卡函数
    Transdata(channelnum);
    //转换完成后开始输出
    startout1(delaynum,startaddress,endaddress,indexaddress,channelnum);
  //  startout(delaynum,startaddress,endaddress,indexaddress,channelnum);
    CloseHandle(hFile2);
    return 0;
}

希望北京有谁熟悉,因为可以方便调试验证,时间很紧。希望周六就能搞定(做过的人大约1小时搞定)我的电话:010-80752670

相关帖子

沙发
foxfox| | 2008-6-19 09:21 | 只看该作者

怪,1小时1万块,怎么没高手支招呢?

使用特权

评论回复
板凳
icecut| | 2008-6-19 19:21 | 只看该作者

告诉我同学了。

我不懂c#。应该不难估计是调用接口你对不上,呵呵。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

1055

帖子

21

粉丝