首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

为什么C#调用VC的DLL参数会传递不过去解决方法

2012-01-12 
为什么C#调用VC的DLL参数会传递不过去我的DLL使用VC6编写,C#可以调用里边的函数。我的DLL中的函数功能很简

为什么C#调用VC的DLL参数会传递不过去
我的DLL使用VC6编写,C#可以调用里边的函数。
我的DLL中的函数功能很简单,如下:
int   CCEDllTest::MsgBoxInt(int   aa)
{
PostMessage(::FindWindow(NULL,_T( "TestMessage ")),WM_USER+10000+1,aa,aa);//发消息给另一个测试窗口,用来判断是否被调用
if   (aa==1)
      return   1;
else
      return   0;
}

C#程序的代码如下:
[DllImport( "cedlltest.dll ")]
public   static   extern   int   MsgBoxInt([Out]   int   aa);
      int   aa;
      aa   =   1;
      if   (MsgBoxInt(aa)   ==   1)
              MessageBox.Show( "ok ");
      else
              MessageBox.Show( "error ");

这个程序执行是,测试窗口会收到消息,说明DLL函数已经被调用,但是消息的参数返回的不是C#传递过去1,而是系统随机分配的数。

这是为什么,C#的代码在哪块有错误,请大侠们教我。

[解决办法]
"函数是类的成员方法 "
这样你不实例化那个类怎么调用?
貌似你的调用方法有问题吧?把C++的那个改成外部函数,不要和类扯上关系
[解决办法]
不好意思,没仔细看,这是个成员方法呀
你的dll应该是com吧?是的话,可以自己定义一个com interface

{
ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
Guid(...),
}

public interface YourInterface
{
[PreserveSig]
public static extern int MsgBoxInt(int aa);
}

热点排行