none
网上有很多C#调用C++ DLL的帮助,但如果我要传递数组或指针呢? RRS feed

  • 问题

  • 网上有很多C#调用C++ DLL的帮助,但我看都不太全面,如果我要传递数组或指针呢?

     我在C++ DLL中写如下代码:

     

    #include <string>
    #include <stdio.h>
    #define LIBEXPORT _API extern "C" __declspec(dllexport)

    __declspec(dllexport) int WebAnalysis(unsigned char Source[],unsigned int SourceSize,unsigned char DeleteElementName[],unsigned int ElemenetNameSize,unsigned char ResultSource[])
    {
     ///<summary>
     /// 从web源文件中查找并删除这些元素
     /// int *Source:  源文件起始指针
     /// int SourceSize: 源文件长度 
     /// int *DeleteElementName: 需删除的元素名起始指针
     /// int ElementNameSize:  元素名长度
     /// int *ResuteSource:   处理后的源文件存放的首指针
     /// return int:       处理后的目标文件的长度
     ///</summary>
     int returnValue=0;

     

     return returnValue;
     // end __declspec(dllexport) int WebAnalysis(int *Source,int SourceSize,int *DeleteElementName,int ElemenetNameSize,int *ResultSource)
    }

    __device__ int Find_ElementName(int *SourceGrid,int SourceGridSize,int *StartArray)
    {
     ///<summary>
     /// 
     /// int *SourceGrid:  源文件起始指针
     /// int SourceGridSize: 源文件长度 
     /// int *StartArray:   处理后的源文件存放的首指针-类型为int
     /// return int:     处理后的目标数组的长度
     ///</summary>


     // end __global__ int Find_ElementName(int *SourceGrid,int SourceGridSize,int *StartArray)
    }

    在def文件中,如此写:

     

    LIBRARY WebAnalysis
    EXPORTS
     WebAnalysis @1
     

    然后我在C#中导入了这个DLL,并如下:

     

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Net;
    using System.Runtime.InteropServices;

    namespace ConsoleLoadDLL
    {
        class Program
        {
            [DllImport("WebAnalysis.dll", CharSet = CharSet.Auto)]
            static extern int WebAnalysis(byte[] Source, int SourceSize, byte[] DeleteElementName, int ElemenetNameSize, byte[] ResultSource);

            unsafe static void Main(string[] args)
            {
                WebClient client = new WebClient();
                StreamReader sr = new StreamReader(client.OpenRead("http://jingzhi.funds.hexun.com/jz/"),Encoding.Default);
                string Str = sr.ReadToEnd();
                byte[] Source = Encoding.Default.GetBytes(Str);
                byte[] ElementName = Encoding.Default.GetBytes("tr");
                byte[] ResultSource=new byte[Source.Length ];

                int ResultSourceSize = WebAnalysis(Source, Source.Length, ElementName, ElementName.Length, ResultSource);


            }
        }
    }
     


    以上代码都编译成功,但是运行的时候:

    C#里的这段有报错:

     

    int ResultSourceSize = WebAnalysis(Source, Source.Length, ElementName, ElementName.Length, ResultSource);

    试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

     

    我检查了代码,没查出什么,请高手指教。谢谢

     

    • 已移动 Leo Liu - MSFT 2011年12月26日 4:33 Moved for better support. (发件人:Visual C#)
    2011年12月23日 7:02

答案

全部回复