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