主頁 > .NET開發 > 有沒有大神幫下,幫我把這個DLL宣告一下,一直在vb.net中呼叫不成功

有沒有大神幫下,幫我把這個DLL宣告一下,一直在vb.net中呼叫不成功

2020-09-18 04:38:27 .NET開發



sing System;
using System.Text;
using System.Runtime.InteropServices;

namespace LCAudioDll
{
    #region 檔案結構引數定義
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public unsafe struct _Fileinfo
    {
        public int Duration;    //play Duration
        public int SampleRate;  //audio samplerate
        public int BitRate;     //audio bitrate
    }
    #endregion

    #region 音頻結構引數定義
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public unsafe struct _WaveInInfo
    {
        public int Index;       //The first soundcard is index 0,the second soundcard is index 1, and so on.
        public int name;        //soundcard's name which is selected.
        public int Formats;     //(unuse)
        public int Channels;    //(unuse)
    }
    #endregion

    #region 混音器結構引數定義
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public unsafe struct _MuxInfo
    {
        public char name;   //Mixer Name
    }
    #endregion

    #region  動態庫結構引數定義
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public unsafe struct _PlayParam
    {
        /// Windows視窗句柄,如果不為NULL,執行緒將事件訊息發送到此視窗
        public UInt32 hWnd;
        /// 音頻流優先級,1優先級最低,255優先級最高,音頻終端優先播放優先級高的音頻。
        public Int32 Priority;
        /// 組播組號,表示執行緒向那個組發送音頻資料,當播放方式是單播或廣播是,此引數無意義。
        public Int32 MultiGroup;
        /// 播放方式,單播,組播和廣播
        public Int32 CastMode;
        /// IP地址,當為播放方式單播是指的是目標IP地址,為組播和廣播時,表示使用的本地網路介面
        public UInt32 IP; 
        ///播放音量
        public Int32 Volume;
        ///播放音調
        public Int32 Tone;
        /// 高音頻率
        public Int32 Treble;
        /// 低音頻率
        public Int32 Bass;
        /// 高音放大因子
        public Int32 Treble_En;
        /// 低音放大因子
        public Int32 Bass_En;
        /// 音頻資料源,0表示資料源為檔案,1表示資料源為聲卡輸入(Line in 或 mic輸入)
        public short SourceType;
        /// 聲卡采樣開關變數
        public short OptionByte;
        /// 聲卡ID號,僅在SourcType = 1時有效,表示采用哪個聲卡的輸入。
        public Int32 DeviceID;
        /// 混音器名字,表示混音器的那個輸入通道最終被采樣。不同的聲卡有不同的混音器名字。
        public fixed byte MuxName[64];
        /// 通道,采樣的通道數
        public Int32 nChannels;
        /// 音源為聲卡輸入時的采樣頻率
        public Int32 nSamplesPerSec;
        /// 音頻檔案的長度,僅SourcType=0時有效
        public Int32 AudioBufferLength;
        /// 音頻資料存盤地址
        public IntPtr AudioBuf;
        /// 私有資料陣列,用戶不能修改里面的資料。
        public fixed Int32 PrivateData[128];
    }
    #endregion

    #region 動態褲函式匯入
    public unsafe class LCAudioThrDll
    {
        private const string LCAudioThrDllName = "LCAudioThrDll.dll";

        //(1) Initialize the _PlayParam structure.
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_init")]
        public extern static int Lc_Init(string filename, _PlayParam* pParam);

        //(2) Start playing audio data
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_play")]
        public static extern int Lc_Play(_PlayParam* pParam);

        //(3) Stop playing audio data
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_stop")]
        public static extern int Lc_Stop(_PlayParam* pParam);

        //(4) Pause playback audio data
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_pause")]
        public static extern int Lc_Pause(_PlayParam* pParam);

        //(5) Continue playing audio data
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_continue")]
        public static extern int Lc_Continue(_PlayParam* pParam);

        //(6) Specify play time point
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_seek")]
        public static extern int Lc_Seek(_PlayParam* pParam, Int32 time);

        //(7) Wait for the play to finish
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_wait")]
        public extern static int Lc_Wait(_PlayParam* pParam);

        //(8) Dynamically adjust the volume
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_set_volume")]
        public static extern int Lc_Set_Volume(_PlayParam* pParam, Int32 Volue);

        //(9) Get the played time
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_get_playtime")]
        public static extern int Lc_Get_PlayTime(_PlayParam* pParam);

        //(10) Get play status
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_get_playstatus")]
        public extern static int Lc_Get_PlayStatus(_PlayParam* pParam);

        //(11) Get the total play time of the current file
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_get_duration")]
        public static extern int Lc_Get_Duration(_PlayParam* pParam);

        //(12) Get the information of the specified file
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_get_fileinfo")]
        unsafe public static extern int Lc_Get_FileInfo(string filename, ref _Fileinfo myfileinfo);

        //(13) Get the information of the sound card
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_rec_devinfo")]
        public extern static int Lc_Rec_DevInfo(_WaveInInfo* Info, ref int Number);

        //(14) Get the information of the sound mixer
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_rec_muxinfo")]
        public extern static int Lc_Rec_MuxInfo(_MuxInfo* Info, ref int Number);

        //(15) Get the version information of dynamic library
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_get_version")]
        public extern static int Lc_Get_Version();

        //(16) Get the last error message
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_getlasterror")]
        public extern static int Lc_GetLastError(_PlayParam* pParam);

        //(17) Start to record audio data
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_record_start")]
        public static extern int Lc_Record_Start(_PlayParam* pParam, string filename);

        //(18) Stop to record audio data
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_record_stop")]
        public static extern int Lc_Record_Stop(_PlayParam* pParam);

        //(19) Query recording status
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_record_status")]
        public static extern int Lc_Record_Status(_PlayParam* pParam);

        //(20) Allocate memory
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_play_getmem")]
        public static extern _PlayParam* Lc_Play_GetMem();

        //(21) Free memory
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_play_freemem")]
        public static extern int Lc_Play_FreeMem(_PlayParam* Plm);

        //(22) Add unicast device
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_addip")]
        public static extern int Lc_AddIP(_PlayParam* pParam, uint ip);

        //(23) Delete unicast device
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_delip")]
        public static extern int Lc_DelIP(_PlayParam* pParam, uint ip);

        //(24) Input audio data of WAV to the dynamic library
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_inputdata")]
        public static extern int Lc_InputData(_PlayParam* pParam, byte[] buf, int datalen);

        //(25) Input audio data of MP3 to the dynamic library
        [DllImport(LCAudioThrDllName, EntryPoint = "lc_inputdata_mp3")]
        public static extern int Lc_InputData_Mp3(_PlayParam* pParam, byte[] buf, int datalen);
    }
    #endregion
}
上面是C# 例子,如何改為VB。net
我自個改了,好象呼叫不成功,
Option Explicit On
Imports System
Imports System.Text
Imports System.Runtime.InteropServices
Module Module1
    '定義網路通信方式
    Public Const cUnicast = 0                  '單播
    Public Const cMulticast = 1                '組播
    Public Const cBroadcast = 2                '廣播

    Public Const AUDIO_TYPE_UNKNOWN = 0
    Public Const AUDIO_TYPE_MP3 = 1
    Public Const AUDIO_TYPE_WAV = 2
    Public Const AUDIO_TYPE_WMA = 3

    Public Const SCR_TYPE_FILE = 0                '資料來源是檔案
    Public Const SCR_TYPE_AUDIOCARD = 1           '資料來源是聲卡
    Public Const SCR_TYPE_BUFFER = 2              '資料來源是記憶體快取
    Public Const SCR_TYPE_STREAM = 3              '資料來源是資料流'V2.0.3.0

    '定義函式回傳值
    Public Const R_OK = 0                          '成功
    Public Const ERR_PARAM = -1                    '引數錯誤
    Public Const ERR_OPT = -2                      '函式執行錯誤
    Public Const ERR_SOCKET = -3                   'socket操作失敗
    Public Const ERR_CODEC = -4                    '初始化編解碼器失敗。

    'Windows 訊息定義
    Public Const WM_USER = &H400
    'public const WM_MSG_EXCEPTION (WM_USER+100)
    Public Const WM_MSG_COMPLETED = (WM_USER + 101)
    Public Const WM_MSG_PAUSE = (WM_USER + 102)
    Public Const WM_MSG_CONTINUE = (WM_USER + 103)
    Public Const WM_MSG_AUDIOPOWER = (WM_USER + 104)

    'Public Const WM_MSG_DATA = (WM_USER + 9901)

#Region "檔案結構引數定義"
    Public Structure FileInfo
        Public Duration As Long            '播放時長
        Public SampleRate As Long          '采樣率
        Public BitRate As Long             '位元率
    End Structure
#End Region

#Region "音頻結構 聲卡資訊結構"

    Public Structure WaveInInfo
        Public Index As Long               '輸入通道的序號
        Public name As Long                '名字
        Public Formats As Long             '支持的格式
        Public Channels As Long            '通道數 2為立體聲輸入。
    End Structure
#End Region

#Region "混音器名稱"
    Public Structure MuxInfo
        <VBFixedArray(63)> Public name() As Byte                '名字
    End Structure
#End Region

#Region "執行緒播放結構"
    ' <StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)>
    Public Structure PlayParam
        Public hWnd As Long                'Windows視窗句柄,如果不為NULL,執行緒將事件訊息發送到此視窗主視窗的句柄
        Public Priority As Long            '音頻流優先級 1最低 255最高
        Public MultiGroup As Long          '組播組號,表示執行緒向那個組發送音頻資料,當播放方式是單播或廣播是,此引數無意義。
        Public CastMode As Long            '播放方式,單播,組播和廣播
        Public IP As Long                  'ip,如果是廣播和多播,此引數是源網卡的IP,如果此地址為0,則由系統決定使用哪個網卡,如果是單播,這是個目標設備的ip地址。
        Public Volume As Long              '播放音量取值0~100
        Public Tone As Long                '音調
        Public Treble As Long        

uj5u.com熱心網友回復:

好多,不愿意動彈。
一條路是就這么改,,,另一條更簡單一些,你用C#封裝一個DLL呼叫就可以了。。。
看了一下,就這么幾種,自己該一下也不難:
 _PlayParam* pParam:先試一下直接傳入結構體,byval就可以。不行的話用intprt,再用marshal把結構體傳進去。。應該沒這么麻煩
ref int這種就byref int就可以了
陣列的和上面的結構體一樣處理就行

uj5u.com熱心網友回復:

C#封裝DLL更不會了。現在的關鍵是因為結構體在記憶體中估計沒對好。用VB6寫的能正常呼叫,用.net 死活對不全。

uj5u.com熱心網友回復:

謝謝,可以的話,能不能幫我寫個?[email protected] 我發資料
下面是DLL廠家提供的說明, 我用VB。net 主要是不知道如何對位。分配記憶體,并保存記憶體位置不變??

說明:_PlayParam結構變數應該是一個分配在堆記憶體上的變數,并保證在整個播放程序記憶體有效,且呼叫lc_play函式后,不能修改結構的內容。對于使用C#開發的用戶,還應該保證此結構變數在播放程序中記憶體位置不能改變。建議C#用戶使用提供的lc_play_getmem,和lc_play_freemem為_PlayParam結構變數分配和釋放記憶體。
如果用戶自己申請的記憶體,請將記憶體清空,防止記憶體內的垃圾資料造成兼容性問題。

uj5u.com熱心網友回復:

新建c#winform類別庫專案:

把廠家給的初始類別庫代碼粘貼覆寫上去。刪掉原來的設計代碼:

點擊生成。
vb.net專案中,參考成功生成的類別庫:

如上圖的LCAudioDll.dll。
ok了,最后效果

uj5u.com熱心網友回復:

謝謝,試過了,vs2010 VS2019提示“未知故障” 然后就沒了。還有一次提示別的,具體忘了。我晚上再詳細試下

uj5u.com熱心網友回復:

好象是不安全的代碼只有在UNLSafeg下出現

uj5u.com熱心網友回復:

 [DllImport(LCAudioThrDllName, EntryPoint = "lc_play_getmem")]
        public static extern _PlayParam* Lc_Play_GetMem();
就是分配一個記憶體,只要你不會收再重新申請,那它就滿足他所說的條件。注意把這個指標宣告為與播放程序相同的生存期,免得被垃圾回收了。
這樣,其實不一定非得用指標,_PlayParam* 可以用intptr來保存,使用時也用intptr。。

你這個指望大家給你改肯定不行,沒有dll沒法測驗。你先把那個lc_getlaseterror宣告對了。然后按照你呼叫的程序,逐步除錯直到這個API回傳的值表明其它API呼叫正確,你的播放內核部分也就做完了。

uj5u.com熱心網友回復:

你要明白,C#保留了使用*的方法,但實際上不用*也可以用指標,指標是一個指向記憶體地址的變數,歸根結底它就是一個變數而已。C#即使不使用不安全代碼也可以使用指標,只不過是被封裝過的指標,在IL解釋之后,它還是那個指向記憶體地址的變數,.NET只是包裝了一下,附加了其它資訊而已,而運行時會決議這些資訊。C#與VB.NET只有少數不同的地方,VB.NET無法使用的特性也非常少,并且VB.NET完全可以操作指標,即使不使用marshal也可以得到自己的函式地址,可以得到陣列地址,字串地址…………如果使用封裝好的marshal類,那么就能更簡單的獲取和使用這些東西。這些都不是問題,但是VB.NET中就是沒有*,用Intptr就可以了,甚至可以用Int64,integer這都可以。


如果想深入理解指標,你可以用vc++寫一段代碼,宣告幾個變數,試一下* & 之類的運算子。并不一定要在代碼中輸出地址,可以 用一些除錯工具,反編譯一下,看看資料在哪,指著存在哪個地址里,如果能夠理解ASM那就更好了,能夠看到編譯后的代碼讓CPU如何通過指標操作資料,如何通過變數操作資料,對應起來看看就全都明白了。指標不是多么難多么難,至少看看這些東西之后簡單的指標操作還是可以理解的非常好的。

歸根結底,編程語言就是一種工具,里面的各種東西也都是工具,使用哪種工具時,有興趣就可以把它拆了看看內部構造,玩不壞的,還能學不少東西。例如你這個DLL,宣告有問題,出在哪個變數里面,到底是指標還是結構,到底是byval還是byref完全可以把這個DLL反編譯一下,瀏覽一下它的原型,最多看一下對引數的操作程序,非常容易就把呼叫方式確定下來了。

uj5u.com熱心網友回復:

謝謝版主,兩天試下來,感覺問題還是出在結構體大小不一樣的原因,在c#中用SIZEof函式,取得結構體大小為0x0000000C 即12位元組,而同樣結構體在VB.net中卻有24位元組,代碼如下
      vb.net 
結構體定義: 
   Public Structure FileInfo
        Public Duration As Long            '播放時長
        Public SampleRate As Long          '采樣率
        Public BitRate As Long             '位元率
    End Structure 
表單加載中運行:
       Dim afileinfo As New FileInfo
        aaa = System.Runtime.InteropServices.Marshal.SizeOf(afileinfo)
        MsgBox(Len(afileinfo), vbExclamation, "錯誤")      
aaa為24    按這個應是正確,LONG是8位元組   但在C#中:[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public  struct _Fileinfo
    {
        public int Duration;    //play Duration
        public int SampleRate;  //audio samplerate
        public int BitRate;     //audio bitrate
    }
private int DelayNum = 0;                   //Current count of delay
 _Fileinfo abc;
 DelayNum = sizeof (_Fileinfo);        DelayNum 卻=12   按C#提示 INt32,應是對應LONG 也是8位元組?

uj5u.com熱心網友回復:

 另附上DLL廠家提供的檔案及示例: 鏈接:https://pan.baidu.com/s/1Y5kAqrfN93ULhObXgbiAoQ 
提取碼:2m6d

問下,這里不能有償發布嗎?若真有朋友幫完成,表達一下心意也應該啊。

uj5u.com熱心網友回復:

專案要改成不安全代碼

uj5u.com熱心網友回復:

可以嘗試拿人家c#編譯好的程式用ilspy等工具反編譯,查看的反編譯代碼改成vb. net

uj5u.com熱心網友回復:

辣就是你粗心哈。。sizeof得到的結果是一樣的才對

uj5u.com熱心網友回復:

參考 13 樓 撿破爛程式員 的回復:
可以嘗試拿人家c#編譯好的程式用ilspy等工具反編譯,查看的反編譯代碼改成vb. net
   
我有這個水平,也就不用求助了。。。。。。。水平也就盤底一點了。

uj5u.com熱心網友回復:

參考 14 樓 清晨曦月 的回復:
辣就是你粗心哈。。sizeof得到的結果是一樣的才對

很感謝你的耐心回復。

不是粗心,只是水平低,學習中,畢竟我的主要作業是硬體的程式,現在為了測驗硬體,不得不硬著頭皮。不然硬體沒法除錯,交付。所以才想著花點錢(硬體程式對方給了1K,都兩個月沒,一直沒除錯不出來,對不起人家,所以才想著有人幫,分點開發費快速搞搞定)

uj5u.com熱心網友回復:

參考 15 樓 nbsmaps的回復:
Quote: 參考 13 樓 撿破爛程式員 的回復:

可以嘗試拿人家c#編譯好的程式用ilspy等工具反編譯,查看的反編譯代碼改成vb. net
   
我有這個水平,也就不用求助了。。。。。。。水平也就盤底一點了。

官方沒有測驗代碼提供給客戶端開發人員嗎

uj5u.com熱心網友回復:

另外廠家也就這個樣子,只有一個會c#的,花了幾天也沒搞定。而客戶那邊原來的軟體都是VB.net 要接入他們程式才能測驗,才現在這個局面。有空嗎,有空的話,幫我寫個示例吧。

uj5u.com熱心網友回復:

58627564我的QQ號

uj5u.com熱心網友回復:

VB.NET的long對應C#的long,64位帶符號整數
VB.NET的Integer對應C#的int,32位帶符號整數

uj5u.com熱心網友回復:

還有,C#結構體有個屬性[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]你翻譯了嗎?我沒看到VB里有這句話

uj5u.com熱心網友回復:

66666666666666666666666

uj5u.com熱心網友回復:

看看學習學習下

uj5u.com熱心網友回復:

C# 中的int是 int32的簡寫, 對應的int64就是long,int16就是short;
例子中的 public int Index,vb.net中你要寫為public index as integer

還有最基本的名字定義你都搞錯了,MuxInfo在C#中前面有個_(下劃線)。還有很多你都沒翻譯。

翻這個要耐心。C#能寫出來的,vb.net都有對應的語法。這個真心不難。

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/70726.html

標籤:VB.NET

上一篇:winform GDI+如何畫3坐標顯示

下一篇:問下各位C#針對AD域的一些操作

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more