如何在C#中调用其他语言所写的DLL程序???急!!!

usxue 2003-04-01 10:01:25
我是用FORTRAN来写一个计算程序并把他编译成DLL,但我想用C#来编写它的用户界面,但我怎么也不能调用这个FORTRAN写的DLL,为什么???急急急!!!!!
这几天把想的头昏脑胀的,累啊!!!!
急!!!各位高手帮帮忙啊!!!!
谢谢!!!
...全文
126 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebirdboy 2003-04-02
  • 打赏
  • 举报
回复
用csc进行编译!
EXAMPLE:csc /out:要输出的文件的位置和文件名 /in(好象是的):要编译成DLL文件的位置和文件名。
然后再在Global的文件中修改在〈assemmlyes>〈/assemmlyes>中添加〈add assemmly〉dll的文件名〈/assemmly〉
在要使用的地方用using语句就好了;!!!
有些地方我记的也不太清楚,但过程就是这样的!!!!!!!!!!!!!
daou101 2003-04-02
  • 打赏
  • 举报
回复
用COM的思想。编一个你要调用的哪个DLL(B)的外壳(A)来包装它,在外壳(A)的构造函数里调用这个.dll(B)的构造函数,并声明B的所有方法,虚的。还要在A中声明一个占位成员,如
char[100] space;//space 的大小一定要大于或等于B占用的空间。将A编译成DLL,必须是VC环境,这个新DLL一定可以在C#中用的,呵呵,有时Game软件的外挂或修改器就是这么做的。
Knight94 2003-04-01
  • 打赏
  • 举报
回复
自己写声明吧,用DllImport
firewing 2003-04-01
  • 打赏
  • 举报
回复
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 );
}
usxue 2003-04-01
  • 打赏
  • 举报
回复
而且我也用TlbImp工具来转化成CLR函数库,还是不行啊:
TlbImp error: The input file 'D:\Example\MyDesign\bin\Debug\SFR2.DLL' is not a v
alid type library
急急急!!!
谢谢!!!
usxue 2003-04-01
  • 打赏
  • 举报
回复
好象不能注册啊,我试过了:
RegAsm 错误:“D:\Example\MyDesign\bin\Debug\SFR2.dll”不是有效的 .NET 程序集,
因此未能加载它
怎么办啊?
tzhguan 2003-04-01
  • 打赏
  • 举报
回复
up
kevinhit 2003-04-01
  • 打赏
  • 举报
回复
上面的都对,先引用,在Using
Knight94 2003-04-01
  • 打赏
  • 举报
回复
好像不是所有的DLL都能引用吧,用DllImport自己写声明。
zwztu 2003-04-01
  • 打赏
  • 举报
回复
楼上的都对
li_new 2003-04-01
  • 打赏
  • 举报
回复
注册那个dll,然后在添加引用中引用!
jcaomao 2003-04-01
  • 打赏
  • 举报
回复
你用vs.net studio 中的 项目--添加引用---com 然后掉用你的那个文件就行了
jcaomao 2003-04-01
  • 打赏
  • 举报
回复
把那个dll注册一下,c#就可以调用了
Knight94 2003-04-01
  • 打赏
  • 举报
回复
如下是FindFile API的声明
// Copyright
// Microsoft Corporation
// All rights reserved

// FindFile.cs

using 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 );
}
}


Knight94 2003-04-01
  • 打赏
  • 举报
回复
如果你用VC或VB调用你的Dll,怎么写?给大家列出来。
usxue 2003-04-01
  • 打赏
  • 举报
回复
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
usxue 2003-04-01
  • 打赏
  • 举报
回复
接口函数是用FORTRAN编写的,不是用.NET写的!
怎么办啊??
usxue 2003-04-01
  • 打赏
  • 举报
回复
不好意思,我的帮助看不了,呵呵……
能帖出来吗??
急!!!
Knight94 2003-04-01
  • 打赏
  • 举报
回复
把你的Dll接口函数如果方便的话给大家列出来,好让大家给你试试。
Knight94 2003-04-01
  • 打赏
  • 举报
回复
你看看.net自带的例子吧
Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\PlatformInvoke\WinAPIs
加载更多回复(1)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧