源程序如下:需要用C#改写,现在这个程序是C++调用动态链接库shell.dll。多谢各位。#include "stdafx.h"#include <windows.h>#define BASE_ADDR             0x18000000
typedef UINT8* (* ProcAddr_Map)(UINT32 physicalADDR, UINT32 dataLen);typedef UINT8* (* ProcAddr_UnMap)(UINT32 physicalADDR, UINT32 dataLen);typedef UINT32 (* ProcAddr_Read)(UINT8* virtualADDR, UINT32 dataLen, UINT16 *pDataBuf);int _tmain(int argc, _TCHAR* argv[]){     
       HINSTANCE        hinstLib = NULL;       hinstLib = LoadLibrary(L"\\windows\\shell.dll");       if(hinstLib == NULL)       {              printf("failed to load shell.dll\r\n");  
            return FALSE;       }       ////////////////////////////////////////////////////////////////获取各功能函数地址       ProcAddr_Map      MemoryMap;       ProcAddr_UnMap  UnMemoryMap;       ProcAddr_Read      Read;    
       MemoryMap = (ProcAddr_Map)GetProcAddress(hinstLib, TEXT("MemoryMap"));       if (MemoryMap == NULL)       {              printf("failed to get ReadFPGA function address \r\n");              return FALSE;       }      
       UnMemoryMap = (ProcAddr_UnMap)GetProcAddress(hinstLib, TEXT("UnMemoryMap"));     
       Read = (ProcAddr_Read)GetProcAddress(hinstLib, TEXT("ReadData16"));             UINT8    *pVirtualAddr = NULL;       INT     nDataLen = 200;  
       UINT32  physicalADDR =BASE_ADDR;       pVirtualAddr = MemoryMap(physicalADDR, nDataLen);             UINT16 bufRead[1];       memset(bufRead,1,sizeof(bufRead));       Read(pVirtualAddr, sizeof(bufRead), bufRead);       ////////////////////////////////////////////////////////////////动态库释放       UnMemoryMap(physicalADDR, nDataLen);       FreeLibrary(hinstLib);       return 0;}
C#dll

解决方案 »

  1.   

    Assembly.LoadFile或Assembly.Load具体怎么用你自己看
      

  2.   


    class Program
    {
      static void Main()
      {
        const uint BASE_ADDR = 0x18000000;
        uint dataLen = 200;
        uint physicalAddr = BASE_ADDR;    IntPtr pVirtualAddr = MemoryMap(physicalAddr, dataLen);
        ushort[] buffer = new ushort[1] { 1 };
        ReadData16(pVirtualAddr, (uint)buffer.Length, buffer);
        UnMemoryMap(physicalAddr, dataLen);
      }
      const string shell = "c:\\windows\\shell.dll";
      [DllImport(shell)]
      static extern IntPtr MemoryMap(uint physicalAddr, uint dataLen);
      static extern IntPtr UnMemoryMap(uint physicalAddr, uint dataLen);
      static extern uint ReadData16(IntPtr virtualAddr, uint dataLen, ushort[] buffer);
    }
      

  3.   


      [DllImport(shell)]
      static extern IntPtr MemoryMap(uint physicalAddr, uint dataLen);  [DllImport(shell)]
      static extern IntPtr UnMemoryMap(uint physicalAddr, uint dataLen);  [DllImport(shell)]
      static extern uint ReadData16(IntPtr virtualAddr, uint dataLen, ushort[] buffer);
      

  4.   

    非常感谢 gomoku,我再尝试一下。