CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

C#中如何获得非托管DLL中的输出参数?

楼主eaglemp()2004-12-03 19:13:30 在 .NET技术 / C# 提问

本人初学C#,请各位前辈帮忙!  
  我在C#中调用VC编写的DLL,要获得输出参数的值,输出参数是一个结构体。当结构体中只包含数值型变量时没有问题,但当结构体中包含字符数组变量时就什么都传不出来了。  
   
  VC的DLL代码如下:  
  typedef   struct   ts  
  {  
  int   n;  
  float   f;  
  char   str1[10];  
  }tt;  
   
  int   Test(tt   *t)  
  {  
  t->n   =   100;  
  t->f   =   1.18;  
  strcpy(t->str1,   "OK1");  
   
  return   0;  
  }  
   
  C#的调用代码为:  
                    1。引入参数结构和DLL的接口函数  
             
  [StructLayout(LayoutKind.Sequential)]  
  public   class   tt    
  {    
  public   int   n;    
  public   float   f;    
   
  [MarshalAs(UnmanagedType.ByValTStr,   SizeConst=10)]    
                                        //也试过   [MarshalAs(UnmanagedType.LPStr)]   ,都不行  
  public   string   str1;  
   
  }  
   
  [DllImport("testdll.dll",CharSet=CharSet.Ansi)]  
  public   static   extern   int   Test(tt   t);  
   
   
                    2。函数调用  
   
  tt   t   =   new   tt();  
                    int   i;  
  i   =   SMGPTransport.Test(t);  
   
  不知道问题出在那里,就高手帮忙分析,先谢了!  
  问题点数:0、回复次数:4Top

1 楼cnhgj(戏子) (没时间练太极)回复于 2004-12-03 19:33:01 得分 0

public   static   extern   int   Test(ref   tt   t);  
   
   
   
  i   =   SMGPTransport.Test(ref   t);Top

2 楼eaglemp()回复于 2004-12-03 19:45:16 得分 0

非常感谢你的回复!  
   
  但这样我也试过了,会抛出异常  
  未处理的“System.ExecutionEngineException”类型的异常出现在   WindowsApplication1.exe   中。Top

3 楼x0000()回复于 2004-12-03 21:02:59 得分 0

我怎么连该dll都不能注册呢?  
  //   vdll.cpp   :   Defines   the   entry   point   for   the   DLL   application.  
  //  
   
  #include   "stdafx.h"  
   
  BOOL   APIENTRY   DllMain(   HANDLE   hModule,    
                                                DWORD     ul_reason_for_call,    
                                                LPVOID   lpReserved  
    )  
  {  
          return   TRUE;  
  }  
  typedef   struct   ts  
  {  
  int   n;  
  float   f;  
  char   str1[10];  
  }tt;  
   
  int   Test(tt   *t)  
  {  
  t->n   =   100;  
  t->f   =   (float)1.18;  
  strcpy(t->str1,   "OK1");  
   
  return   0;  
  }Top

4 楼nmlvjun(网事如风)回复于 2004-12-17 17:05:25 得分 0

ding  
  结构体中包含字符数组变量时怎么传值?Top

相关问题

  • c#中怎样调用非托管DLL
  • c++输出问题
  • 原型为int _stdcall omrg(char * buf)的非托管DLL在C#里怎么调用?
  • 在C++Builder中的DLL怎样输出符合VC++的__stdcall标准的DLL!
  • c++ 输出符的重载??
  • c++空格控制输出
  • 高手请进,请问如何在C#里面动态调用非托管的DLL。
  • c或c++的输入输出问题
  • tc3只能输出c++?怎么输出c呀
  • C#里面有关事件托管

关键词

  • c#
  • dll
  • 结构
  • 参数
  • tt
  • 体中
  • 调用
  • float
  • 变量时
  • str

得分解答快速导航

  • 帖主:eaglemp

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo