日期:2014-05-18  浏览次数:20937 次

c# webservice调用dll
困扰了我很长一段时间了。

在webservice中加载a.dll并调用其中的函数。
a.dll使用时需要跟该dll相关的一个data文件夹   dll_data,在dll.conf文件中有该
dll使用data的配置信息。

之前有人成功使用过该dll.调用该dll。Import该dll的代码段:

public   class   test
{
    private   const   string   path=@ ".\a.dll ";
    [DllImport(path,CharSet=CharSet.Ansi,EntryPoint= "?aaaa@@bbbb@cccc ")]
    public   static   extern   int   aaaa(string);
}

该dll文件的资源引用配置文件dll.conf信息:

Dll_dataFolder=./dll_data/

dll的data文件夹dll_data以及dll.conf配置文件与该dll放置于同一目录下。

在c#的win32   console   application项目中,将dll,   dll_data,   dll.conf文件同时
置于工程文件夹的debug子目录下,能正常调用加载dll并执行函数。

但是在c#   webservice或者网站中,可以加载该dll(因为没有提示错误:加载dll模块
失败。)   但是引用dll方法一个也不执行,但是不提示错误。

建立c#   webservice或者网站在调用函数aaaa时,
test.aaaa(testString);不会报错,但是运行该函数没有相应的结果。
也即加载dll成功,调用方法失败。

想知道这里test.cs文件中   private   const   string   path=@ ".\a.dll ";
这里的当前目录,在console   application中是指   debug目录,
那在webservice中是指什么呢?与asmx文件同一个目录,还是windows\system32?
还是VS的IDE目录?
dll的配置文件dll.conf中也有Dll_dataFolder=./dll_data/   这个当前目录又是哪个呢?
                                                                                    ~~
我在windows\system32中和VS的IDE目录下同时都放了dll,data,conf文件,
在asmx同目录下也放了dll,data,conf文件,但是还是无济于事。

不知道怎么样才能正确地在webservice和网站中加载该dll.
不知道dll文件应该放哪里,data,conf文件又应该放在哪里,该dll才能正确地被
调用。


------解决方案--------------------
应该用 Server.Mappath()来定义目录。
------解决方案--------------------
放在bin目录中试一试?
------解决方案--------------------
可能在congfig文件,和页面本身都要加上这个dll文件的引用
------解决方案--------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; //[DllImport]

namespace DllDemoCSharp
{
public partial class Form1 : Form
{

public struct CvPoint
{
int x;
int y;
}
  

[DllImport("DllDemo.dll",EntryPoint="Add")] public static extern int Add(int a,int b);
[DllImport("win32Console.dll")]
public static extern CvPoint OpenCVFindEdge(String imageName, int tnY, int m, int tnThresh);


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
int test,test2,test3;
test = Add(1,2);
test2 = Add(3,4);
CvPoint Point;
String imageName;
imageName = "c:\\temp\\testpic.bmp";
Point = OpenCVFindEdge(imageName,50, 1, 125);
test3 = Add(3,4);
}
}
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhjh632/archive/2009/06/05/4245579.aspx