读书人

顶者有分. asp 请求 c# dll 有关问题

发布时间: 2012-02-04 15:43:08 作者: rapoo

高手请进,顶者有分. asp 请求 c# dll 问题
dll 类代码

/// 缩略图
public static byte[] GetThumbnail(byte[] img, int width, int height, string mode)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(img);
Image originalImage = System.Drawing.Image.FromStream(ms);

int towidth = width;
int toheight = height;

int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
Image bitmap;
if (ow > towidth || oh > toheight)
{
switch (mode)
{
case "HW "://指定高宽缩放(可能变形)
break;
case "W "://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H "://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;


break;
case "Cut "://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}


break;
default:
break;
}

//新建一个bmp图片
bitmap = new System.Drawing.Bitmap(towidth, toheight);

//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);

//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//清空画布并以透明背景色填充
g.Clear(Color.Transparent);

//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow, oh),
GraphicsUnit.Pixel);
}
else
bitmap = originalImage;

// Image aa = System.Drawing.Image.FromFile( "c:\\aa.bmp ");

Bitmap bb = new Bitmap(bitmap);


System.IO.MemoryStream stream1 = new System.IO.MemoryStream();
bb.Save(stream1, System.Drawing.Imaging.ImageFormat.Bmp);
Byte[] nn = stream1.ToArray();


return nn;
}

a.asp
------------------------------------------------
sqlstr = "Select P_Image From Product where Product_Id=1 "
Set prs = Cdb.Getrs(sqlstr,1)
m_pic = prs.Fields( "P_Image ").value
Set rs = server.CreateObject( "ClassLibrary.CL ")

Response.ContentType = "image/gif "
Response.BinaryWrite (rs.GetThumbnail(m_pic,20,20, "HW "))
其它注册都正常.
运行a.asp时
对象不支持此属性或方法: 'rs.GetThumbnail '
我知道是类型不对应而造成的,请求各位大虾们应如何修改.谢谢.

[解决办法]
第一个顶``分多么?
[解决办法]
网上找的资料

第一种方法:

c#专门用于.NET运行时,其程序是受管制的代码.
不过可以后期绑定C#装配件,即.DLL代码,但很麻烦.
1.先sn -k yourdll.snk 创建全局高速缓存;
2.修改你的assemblyinfo.cs:
using system.reflection
[assembly:AssemblyKeyFile:( "yourdll.snk ")]
3.编译assemblyinfo.cs模块
csc /t:module /out:assembleinfo.dll assemblyinfo.cs
4.再编译yourdll.cs,将其安装到全局高速缓存中
csc /t:library /addmodule:assemblyinfo.dll yourdll.cs
gacutil /i yourdll.dll
最后可以在VB中应用
set objtemp=createobject( "yourdll.yourdll ")


地二种方法:

ASP调用C# DLL
ASP 调用C#编写的DLL的方法

前一阵子一直在忙一个项目,其中要用到ASP调用C#的DLL,网上资历料不少,总结了一下,写个例子

出来

首先建立一个类库的项目
之后编写一个接口,ASP要调用的对象实现这个接口,代码如下(要有一个没有参数的构造函数)



using System;
using System.Runtime.InteropServices;

namespace Test
{
[Guid( "123AC4E1-BEB0-45a1-BE3F-91BDD16A117A ")]
public interface ITest
{
[DispId(0)]
string TestString();
}



public class Test : ITest
{
//从工具下的创建GUID取得
public Test()
{
}

#region ITest 成员

public string TestString()
{
return "Test ";
}

#endregion
}


之后对这个类进行强签名(如果这个DLL调用的其它DLL的话,也要进行强签名),运行Visual

Studio 2003 .net 命令提示,执行sn -k 后加输出的DLL所在目录,如sn -k 文件路径\test.snk,之后会生

成test.SNK文件,打开AssemblyInfo.cs文件,在[assembly: AssemblyKeyFile( " ")]里填写生成的SNK文件

的路径,如[assembly: AssemblyKeyFile( "文件路径\\test.snk ")],之后重新编译


使用regasm工具对程序集进行注册,运行Visual Studio 2003 .net 命令提示,执行regasm /tlb

DLL文件

之后使用gacutil工具将DLL程序集安装到全局程序集缓存中,也是先运行Visual Studio 2003 .net

命令提示,再执行gacutil /i 要注册的DLL的路径


之后就可以asp里调用测试啦
sn.exe
regasm.exe
gacutil.exe
这三个工具都可以在Visual Studio .net 2003的安装目录下的SDK\v1.1\Bin目录下找到


------解决方案--------------------


好长啊

帮顶~
[解决办法]
up
[解决办法]
太长了,怕把天顶漏了
[解决办法]
UP
[解决办法]
先顶再说
[解决办法]
up~~
[解决办法]
dll还不懂,UP
[解决办法]
ding
[解决办法]
是要生成缩略图?看我这个
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);

int towidth = width;
int toheight = height;

int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;

switch (mode)
{
case "HW "://指定高宽缩放(可能变形)
break;
case "W "://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H "://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut "://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
}

//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

//新建一个画板
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//清空画布并以透明背景色填充
g.Clear(System.Drawing.Color.Transparent);

//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
new System.Drawing.Rectangle(x, y, ow, oh),
System.Drawing.GraphicsUnit.Pixel);

try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();


}
}
[解决办法]
呵呵,关注一下
[解决办法]
低手也进,来鼎鼎.
[解决办法]
UP
[解决办法]
这个基本没办法
只能换一种思路了,你先不要使用asp来调用

先用asp.net来调用,新建一个解决方案把你dll那个工程包含进来,在建立另一个asp.net工程,在asp.net引用com控件来引用dll,然后启动调试,这样如果有错误,vs2005至少有错误的详细信息,有错误的详细信息你才有可能知道是那里错了
[解决办法]
mark
[解决办法]
up
[解决办法]
UP
[解决办法]

[解决办法]
不...ing...up
[解决办法]
mark
[解决办法]
up..
[解决办法]
mark
[解决办法]
up
[解决办法]
mark
[解决办法]
接分
[解决办法]
不会哦,帮你顶ing~!
[解决办法]
不知道为什么,有时客户要求都这么奇怪
[解决办法]
ding
[解决办法]
你怎么用
static
方法
改!!!!!!
[解决办法]
关注中。。。。。。。
[解决办法]
不会 顶上去
[解决办法]
太高深了我不,只能你一下了
[解决办法]
UP!

[解决办法]

我也不会,帮顶一下
[解决办法]
up
[解决办法]
先帮顶下再说!!!~~~


你是想做个图表是吧!~
http://blog.ccidnet.com/blog.php?uid=17785 这里有个统计图表你可以看一下作为参考
[解决办法]
com
是基于接口调用的不能用static
[解决办法]
进来学习一下~~
不过发现大家好像都顶帖的多啊 ~
[解决办法]
不会,只能用力地顶!
[解决办法]
靠,服了
[解决办法]
up
[解决办法]
jf

[解决办法]
同意 watson110
[解决办法]

读书人网 >asp.net

热点推荐