把那个dll注册一下,c#就可以调用了

解决方案 »

  1.   

    注册那个dll,然后在添加引用中引用!
      

  2.   

    好像不是所有的DLL都能引用吧,用DllImport自己写声明。
      

  3.   

    上面的都对,先引用,在Using
      

  4.   

    好象不能注册啊,我试过了:
    RegAsm 错误:“D:\Example\MyDesign\bin\Debug\SFR2.dll”不是有效的 .NET 程序集,
    因此未能加载它
    怎么办啊?
      

  5.   

    而且我也用TlbImp工具来转化成CLR函数库,还是不行啊:
    TlbImp error: The input file 'D:\Example\MyDesign\bin\Debug\SFR2.DLL' is not a v
    alid type library
    急急急!!!
    谢谢!!!
      

  6.   

    dll声明和调用的例子
    // Declare a class member for each structure element.
    [ StructLayout( LayoutKind.Sequential )]
    public class SystemTime 
    {
       public ushort year; 
       … 
       public ushort milliseconds; 
    }public class LibWrap 
    {
       // Declare a managed prototype for the unmanaged function.
       [ DllImport( "Kernel32.dll" )]
       public static extern void GetSystemTime( [In,Out] SystemTime st );
    }
      

  7.   

    你看看.net自带的例子吧
    Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\PlatformInvoke\WinAPIs
      

  8.   

    把你的Dll接口函数如果方便的话给大家列出来,好让大家给你试试。
      

  9.   

    接口函数是用FORTRAN编写的,不是用.NET写的!
    怎么办啊??
      

  10.   

    PROGRAM FEM802

    OPEN(5,FILE='INT.DAT',STATUS='OLD')
    OPEN(6,FILE='OUT.LIS',STATUS='NEW') CALL INPUT
    CALL STIFS
    CALL LOADS
    CALL LDLTS
    CALL STRES

    CLOSE(5)
    CLOSE(6)
    STOP
    END
      

  11.   

    如果你用VC或VB调用你的Dll,怎么写?给大家列出来。
      

  12.   

    如下是FindFile API的声明
    // Copyright
    // Microsoft Corporation
    // All rights reserved// FindFile.csusing System;
    using System.Runtime.InteropServices;/*
    typedef struct _WIN32_FIND_DATA 
    {
      DWORD    dwFileAttributes; 
      FILETIME ftCreationTime; 
      FILETIME ftLastAccessTime; 
      FILETIME ftLastWriteTime; 
      DWORD    nFileSizeHigh; 
      DWORD    nFileSizeLow; 
      DWORD    dwReserved0; 
      DWORD    dwReserved1; 
      TCHAR    cFileName[ MAX_PATH ]; 
      TCHAR    cAlternateFileName[ 14 ]; 
    } WIN32_FIND_DATA, *PWIN32_FIND_DATA; 
    */[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Auto )]
    public class FindData 
    {
    public int fileAttributes = 0;

    // creationTime was embedded FILETIME structure
    public int creationTime_lowDateTime = 0 ;
    public int creationTime_highDateTime = 0;

    // lastAccessTime was embedded FILETIME structure
    public int lastAccessTime_lowDateTime = 0;
    public int lastAccessTime_highDateTime = 0;

    // lastWriteTime was embedded FILETIME structure
    public int lastWriteTime_lowDateTime = 0;
    public int lastWriteTime_highDateTime = 0;

    public int nFileSizeHigh = 0;
    public int nFileSizeLow = 0;
    public int dwReserved0 = 0;
    public int dwReserved1 = 0;

    [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=256 )]
    public String fileName = null;

    [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=14 )]
    public String alternateFileName = null;
    }public class LibWrap
    {
    //HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);

    [ DllImport( "Kernel32.dll", CharSet=CharSet.Auto )]
    public static extern IntPtr FindFirstFile( String fileName, [ In, Out ] FindData findFileData );
    }public class App
    {
    public static void Main()
    {
    FindData fd = new FindData();
    IntPtr handle = LibWrap.FindFirstFile( "C:\\*.*", fd );

    Console.WriteLine( "The first file: {0}", fd.fileName );
    }
    }
      

  13.   

    你用vs.net studio 中的 项目--添加引用---com 然后掉用你的那个文件就行了
      

  14.   

    用COM的思想。编一个你要调用的哪个DLL(B)的外壳(A)来包装它,在外壳(A)的构造函数里调用这个.dll(B)的构造函数,并声明B的所有方法,虚的。还要在A中声明一个占位成员,如
    char[100]  space;//space 的大小一定要大于或等于B占用的空间。将A编译成DLL,必须是VC环境,这个新DLL一定可以在C#中用的,呵呵,有时Game软件的外挂或修改器就是这么做的。
      

  15.   

    用csc进行编译!
    EXAMPLE:csc /out:要输出的文件的位置和文件名 /in(好象是的):要编译成DLL文件的位置和文件名。
    然后再在Global的文件中修改在〈assemmlyes>〈/assemmlyes>中添加〈add assemmly〉dll的文件名〈/assemmly〉
    在要使用的地方用using语句就好了;!!!
    有些地方我记的也不太清楚,但过程就是这样的!!!!!!!!!!!!!