将 ExtraPutty.dll 实现到 C# 程序中
本文关键字:程序 实现 ExtraPutty dll | 更新日期: 2023-09-27 18:35:45
我正在尝试在我的c#程序中使用ExtraPutty的功能。ExtraPutty为此提供了一个dll,甚至是c#示例程序。
该示例对我不起作用。当示例程序调用其中一个 extraputty 函数时,我收到以下错误消息:"程序无法启动,因为缺少 lua53.dll。再次安装程序以解决此问题。
我将dll放入输出文件夹,然后我尝试安装 dll,但 Windows 无法将其识别为有效的 dll。我用了
Regsrv32/i C:''Path''Lua53.dll
并收到以下错误消息:"模块已加载,但找不到 dllRegisterServer-EntryPoint。确保它是有效的 dll 或 ocx 文件,然后重复。
dll 有什么问题?如何正确安装?
然后我做了自己的程序:我没有收到dll错误,但我还没有获得功能。我想我在导入和数据类型上犯了错误。我正在发送命令"Unanme -r",它应该返回目标操作系统的一些版本号。但是什么也没回来。
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ExtraPuttyDLL_Test
{
class Program
{
[DllImport("C:''Users''xroeseners''Desktop''ExtraPuTTY-0-29''ExtraPuTTY.dll", EntryPoint = "Connexion")]
static extern int OpenConnection( string TargetName,
ref UInt32 ConnectionId,
string Login,
string Password,
byte ShowTerminal,
Int32 Protocol,
UInt32 PortNumber,
Int32 Report,
CallbackRcvData Callback,
UInt32 SpecSettings);
[DllImport("C:''Users''xroeseners''Desktop''ExtraPuTTY-0-29''ExtraPuTTY.dll", EntryPoint = "SendRcvData")]
static extern int SendData( UInt32 ConnectionId,
string Data,
string Title,
string Comments,
Int32 TimeCapture,
char[] Buf,
Int32 MaxSizeData,
UInt32 settings);
// int SendRcvData(unsigned long ConnectionId,char *Command,char *Title,char *Comments,long TimeCapture,char **DataRcv,long MaxSizeofData,unsigned long settings);
// Settings Bit fields of settings (2^0 : CRLF (0 send,1 not send),2^1 : Virtual key codes (0 no virtual key codes in command,1 yes)...reserved)
// See FAQ page for a description of all virtual keys codes.
[DllImport("C:''Users''xroeseners''Desktop''ExtraPuTTY-0-29''ExtraPuTTY.dll", EntryPoint = "CloseConnexion")]
static extern int CloseSession(UInt32 ConnectionId);
public static UInt32 myConnectionId;
public delegate int CallbackRcvData(UInt32 ConnectionId, IntPtr Data, Int32 size, Int32 Status);
public static string myString;
static void Main(string[] args)
{
myConnectionId = new UInt32();
int size, status;
char[] data = null;
CallbackRcvData Callback = new CallbackRcvData(RcvData);
//CallbackRcvData = new CallbackRcvData(myConnectionId,
OpenConnection("192.168.8.98",
ref myConnectionId,
"admin", // user
"admin", // password
0, // no display of putty terminal
1, // SSH Protocol
22, // Port
0, // Generate Report: 0 = nein
Callback,
0); // bin_000 -> dont wait login prompt, dynamically starting putty log, ssh v1 otherwise ssh v2
SendData(myConnectionId,
"uname -r",
"",
"",
5000,
data,
20000,
0);
CloseSession(myConnectionId);
}
public static int RcvData(UInt32 ConnectionId, IntPtr Data, Int32 size, Int32 Status)
{
if ((size > 0) && (Status == 0) && (Data != null))
{
myString = Marshal.PtrToStringAnsi(Data) ;
}
return 0;
}
}
}
dll 有什么问题?
真的没什么。它只是没有COM dll。
如何正确安装?
通常,您将它放在需要它的程序集旁边。就像ExtraPuTTY一样.dll。不要使用绝对路径,尤其是当它们指向您的用户配置文件时。