SamIT 2019. 12. 23. 03:11

dll을 선언하여 c#에서 사용할 수 있는 법을 오늘 알게 되었다. 그리 어렵지 않았는데 일주일이나 삽질을 했다...

Import한 dll에서 RawData함수에 파일이름을 넘기는 법을 생각하다가 힘들어서 오늘은 이만 자러간다. ㅂㅂ

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO; // stream 구조체 선언
using System.Runtime.InteropServices;

namespace PEview_01
{
    
    public partial class Form1 : Form
    {

        private string fileName = "";
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
           
        }

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            
        }

        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            /*
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.DefaultExt = "exe";
            //openFile.Filter = "Images Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png)|*.jpg;*.jpeg;*.gif;*.bmp;*.png";
            openFile.Filter = "Executable Files(*.exe; *.dll)|*.exe;*.dll";
            openFile.ShowDialog();
            */
            Stream myStream = null;
            byte[] byte_load = new byte[256];
            DialogResult dr;
            OpenFileDialog openFile = new OpenFileDialog();

            openFile.InitialDirectory = "C:\\Users\\s\\Desktop"; //기본 파일 위치 지정
            openFile.DefaultExt = "exe";
            openFile.Filter = "exe files (*.exe; *.dll)| *.exe;, *.dll;"; //파일 필터링
            openFile.FilterIndex = 2;
            openFile.RestoreDirectory = true;

            if (openFile.ShowDialog() == DialogResult.OK)
            {
                //컨트롤에 이름 정하기
                //tbAzeName.Text = openFile.FileName; //???
                //tbAzeName.Text = openFile.FileName; //???
                String file_path = openFile.FileName;

                try
                {
                    using (BinaryReader bynr = new BinaryReader(File.Open(file_path, FileMode.Open)))
                    {
                        byte[] bytes = bynr.ReadBytes(16);
                        listView1.Columns.Add("ProductName", 100);
                        listView1.Columns.Add("Price", 100);
                        listView1.Columns.Add("Quantity", 100);

                        string tmpSTR = Encoding.Default.GetString(bytes).TrimEnd('\0');
                        //string str = Convert.ToString(bytes);
                        String[] arr = new String[3];
                        arr[0] = "0x0000";
                        arr[1] = tmpSTR;
                        arr[2] = "10";

                        ListViewItem lvt = new ListViewItem(arr);
                        listView1.Items.Add(lvt);   
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
            
        }

        private void resetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            listView1.Columns.Add("ProductName", 100);
            listView1.Columns.Add("Price", 100); 
            listView1.Columns.Add("Quantity", 100);

            String[] arr = new String[3];
            arr[0] = "갤럭시 노트 3"; 
            arr[1] = "500000"; 
            arr[2] = "10";

            ListViewItem lvt = new ListViewItem(arr);
            listView1.Items.Add(lvt);



        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
    class dll
    {
        [DllImport("D:\\04_PE_Viewer\\MKDLL\\Debug\\MKDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        private static extern char RawData();
        [DllImport("D:\\04_PE_Viewer\\MKDLL\\Debug\\MKDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        private static extern char PrintRaw();

    }
}